Умножение длинных чисел - Pascal ABC (19453)

Узнай цену своей работы

Формулировка задачи:

Проверьте код,пожалуйста,верно ли реализованна задача: заданы две строки шестнадцатеричных символов (длинное шестнадцатеричное число в символьной форме).Разработать программу умножение первого длинного числа на второе. Произведение в форме строки с шестнадцатеричными символами. Исходные данные извлекаются из входного текста файла, результаты записываются в выходной текстовый файл. Интересует только умножение двух длинных чисел...за ввод и вывод из файла еще не бралась...Может можно как то по короче и по проще для Pascal ABC
Уважаемые...очень прошу гляньте код...правильно ли реализовано умножение длинных чисел...пожалуйста

Решение задачи: «Умножение длинных чисел»

textual
Листинг программы
uses crt;
const nmax=1000;//макс. число разрядов во вводимых числах
type mas=array[1..2*nmax] of byte;//тип масива, число разрядов *2 для результата
function vvod(var a:mas):integer;//ввод чисел
var c:char;
    n:integer;
begin
n:=0; //количество разрядов
repeat
c:=readkey; //вводим посимвольно
if c in ['0'..'9','A'..'F'] then //если допустимые
 begin
  write(c);//выводим
  n:=n+1; //добавляем разряд
  if c in ['0'..'9'] then a[n]:=ord(c)-48 //если цифра пишем в массив 0..9
  else a[n]:=ord(c)-55 //если буква 10..15
 end;
if (c=#13)or(n=nmax) then writeln //если Enter или макс. разрядов, новая строка
until (c=#13)or(n=nmax);//и выход
vvod:=n//кол. разрядов
end;
//собственно умножение
procedure umn(a,b:mas;na,nb:integer;var c:mas;var nc:integer);
var i,j,p,k:integer;
begin
for i:=1 to 2*nmax do c[i]:=0; //обнулим результат
for i:=na downto 1 do //перемножим поразрядно
for j:=nb downto 1 do
 begin
   c[na-i+2+nb-j]:=c[na-i+2+nb-j]+(c[na-i+1+nb-j]+a[i]*b[j])div 16;//в следующий разряд излишки
   c[na-i+1+nb-j]:=(c[na-i+1+nb-j]+a[i]*b[j])mod 16;//в текущий остаток от деления на 16
 end;
writeln('Результат:');
{пропускаем начальные нули}
i:=2*nmax;
while (c[i]=0)and(i>1)do i:=i-1;
{выводим результат}
for j:=i downto 1 do
if c[j] in [0..9] then write(c[j])
else write(chr(c[j]+55));
end;
 
var a,b,c:mas;
    na,nb,nc:integer;
begin
writeln('Введите 1 число в СС 16, конец ввода Enter');
na:=vvod(a);
writeln('Введите 2 число в СС 16, конец ввода Enter');
nb:=vvod(b);
umn(a,b,na,nb,c,nc)
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.714 из 5
Похожие ответы