Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
Relrin
0 / 0 / 1
Регистрация: 21.10.2010
Сообщений: 32
#1

Умножение больших чисел

21.10.2010, 19:01. Просмотров 4930. Ответов 3
Метки нет (Все метки)

Суть задачи в том, чтобы найти произведение двух 50-значных чисел. Попытка через 3 массива выйти (два для оперирования с числами, и третий для хранения результата) пока не привели к полной решаемости задачи. Какие-то числа считает правильно, какие-то не совсем так (например, 2*3=6 правильно считает, а скажем 15*3=35, что не правильно). Помогите пожайлуйста

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Var
   buf        : integer;           //полученное число, в результате умножения
   des        : integer;           //счетчик "десяток"
   n,m        : integer;           //счетчики длины строки
   i,j,q      : integer;           //переменные для работы со строкой и массивами
   x1,x2      : string;            //сюда вводим числа в виде строк
   c,d: array[1..50]   of integer; //массивы для хранения и оперирования с числами 
   res: array[1..2500] of integer; //результат вычислений
 
begin
   write('Введите первое число: ');
   readln(x1);
   n:=length(x1);
   write('Введите второе число: ');
   readln(x2);
   m:=length(x2);
   //перенос первого числа в массив
   i:=1;
     repeat
      val(x1[i],c[i],q);
      i:=succ(i);
     until i>n;
   //перенос второго числа в массив  
   i:=1;
     repeat
      val(x2[i],d[i],q);
      i:=succ(i);
     until i>m;
   //умножение двух чисел (умножение "столбиком") 
   for i:=1 to length(x1) do
   begin
     for j:=1 to length(x2) do
     begin
      buf:=c[i]*d[j]+des+res[i+j-1];
      res[i+j-1]:=buf mod 10;
      des:=buf div 10;
     end;
    res[i+j]:=des;
   end;
   //вывод полученного числа 
   if res[1]=0 then
   for i:=2 to length(x1)-length(x2)+1 do write(res[i])
    else 
   for i:=1 to length(x1)-length(x2)+1 do write(res[i]);
   readln;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2010, 19:01
Ответы с готовыми решениями:

Дан массив. Вычислить умножение и количество положительных элементов, не равных нулю и больших b
Дано массив x = (12.37, 16.55, 2.43, 0.81, 0.32, 1.345, -12.18, 0.15, -4.314,...

Задана последовательность из N вещественных чисел. Определить, сколько среди них чисел меньших К, равных К и больших К
Задана последовательность из N вещественных чисел. Определить, сколько среди...

Умножение комплексных чисел
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ 1. Ввести множество, запись или строку с помощью...

Умножение двоичных чисел
Помогите разработать программу для умножения двух вводимых с клавиатуры...

Факториал больших чисел
program factorial; var i, n,otv,x,k,z,w:longint; itog,c,d:string; begin...

3
WatsOne
36 / 37 / 13
Регистрация: 10.10.2010
Сообщений: 115
21.10.2010, 19:29 #2
нашёл только ошибку на выводе...

Pascal
1
2
3
4
if res[1]=0 then
   for i:=2 to length(x1)-1+length(x2) do write(res[i])
    else
   for i:=1 to length(x1)-1+length(x2) do write(res[i]);
до этого он не все цифры показывал... а по поводу вычислений ошибка точно при умножении столбиком, попробуйте проверить пошаговой отладкой
1
Relrin
0 / 0 / 1
Регистрация: 21.10.2010
Сообщений: 32
21.10.2010, 20:51  [ТС] #3
Сейчас осталась маленькая накладка. Когда например считаю число, скажем 3*4, то в результате выходит 12, но выводит только 2, как добавить недостающий знак? (Внизу код умножения)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   for i:=length(x1) downto 1 do
   begin
     for j:=length(x2) downto 1 do
     begin
      buf:=c[i]*d[j]+des;
        if buf>9 then
        begin
         res[i+j-1]:=buf mod 10;
         des:=buf div 10;
        end
         else
         begin
          res[i+j-1]:=buf;
          des:=0;
         end;    
     end;
   end;
0
Puporev
Модератор
54350 / 41942 / 28978
Регистрация: 18.05.2008
Сообщений: 98,790
21.10.2010, 22:19 #4
Посмотри эту тему. Там есть умножение и сложение.
http://www.cyberforum.ru/pascal/thread175683-page2.html
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2010, 22:19

арифметика больших чисел,
Написать программу, находящую корень из четвертой степени числа N для...

Деление больших чисел
Есть 2 массива, в котором хранятся 50-значные числа. Необходимо найти частное и...

Подсчитать общее количество чисел в матрице, подсчитать процент чисел больших 10
1. Задано число N. Сформировать матрицу А размером N на N из случайных чисел от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru