Форум программистов, компьютерный форум, киберфорум
Наши страницы

Turbo Pascal

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.67
Relrin
0 / 0 / 0
Регистрация: 21.10.2010
Сообщений: 32
#1

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

21.10.2010, 19:01. Просмотров 4825. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Умножение больших чисел (Turbo Pascal):

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

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

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

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

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

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

3
WatsOne
36 / 37 / 3
Регистрация: 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 / 0
Регистрация: 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
Модератор
54001 / 41634 / 14718
Регистрация: 18.05.2008
Сообщений: 97,867
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
Привет! Вот еще темы с ответами:

Факториал больших чисел - Turbo Pascal
program factorial; var i, n,otv,x,k,z,w:longint; itog,c,d:string; begin writeln('ввести факториал'); readln(n); k:=12; for...

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

Умножение/деление длинных чисел - Turbo Pascal
Приветствую Столкнулся с задачами умножения и деления длинных чисел. Прошу по возможности помочь написать код программы.

Количество чисел, больших 100 - Turbo Pascal
создать процедуру, которая считает количество цифр, больших 100


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

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

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