Умножение длинных чисел - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д