Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2014, 23:26   #1
IT-school
Пользователь
 
Регистрация: 04.05.2011
Сообщений: 39
По умолчанию Длинная арифметика: произведение

Здравствуйте, форумчане!
Не получается написать программу на произведение больших чисел.
Вот код:
Код:
program dlinnja;
var f,g:text;
    a,i,o,code,s2:integer;
    x1,x2,z:array[1..101] of integer;
    s1:string;
begin
assign(f,'input.txt');
assign(g,'output.txt');
reset(f);
rewrite(g);
readln(f,s1);
readln(f,s2);
for i:=100-length(s1) to 100 do begin
                                a:=a+1;
                                val(s1[a],x1[i],code);
                                end;
a:=0;
o:=0;
for i:=100 downto 1 do begin
                       z[i]:=(o+x1[i]*s2) mod 10;
                       o:=(x1[i]*s2+o)div 10;
                       end;
a:=0;
i:=0;
while a<1 do begin
             i:=i+1;
             if z[i]>0 then a:=i;
             if i>101 then writeln(g,0);
             end;

for i:=a to 99 do write(g,z[i]);
close(f);
close(g);
end.
Для маленьких чисел работает, а вот для больших - фигню выдаёт.
IT-school вне форума Ответить с цитированием
Старый 24.02.2014, 00:05   #2
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

Вы лучше ссылку на задачу дайте. А то не понятно "длинные" это какие.
А вообще:
1. Если s1 и s2 строковые представления целых чисел, то почему вы s2 берете числом?
В этом случае алгоритма похож на школьное умножение чисел в столбик. И цикл будет не один.
2. Если s2 - это цифра, то у вас не учитывается перенос разряда в последнем знаке числа
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 24.02.2014, 00:09   #3
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

И пользуйтесь поиском:
http://www.programmersforum.ru/showthread.php?t=215772
Это по-моему ваша задача. Из того же места... Только на с++
Переписать код на паскаль не тяжело.
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 24.02.2014, 06:08   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Создайте процедуру умножения числа на один разряд, ну а дальше в цикле. И да, следите за переносом в старшие разряды.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 24.02.2014, 06:54   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Идем.Качаем. Находим в конце процедурки для длинки. Радуемся..
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длинная арифметика nimfa1 Общие вопросы Delphi 4 28.06.2012 15:16
Длинная арифметика. Leshii Паскаль, Turbo Pascal, PascalABC.NET 4 01.03.2012 11:38
C# Длинная арифметика _Varyag_ Помощь студентам 23 21.02.2012 19:33
Длинная арифметика morgan97 Паскаль, Turbo Pascal, PascalABC.NET 0 04.12.2011 20:03
Длинная арифметика DmT Помощь студентам 2 06.10.2007 22:43