Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 16

Длинная Арифметика. Сложение

30.12.2015, 10:59. Показов 1956. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Считываем в строку a и b, 2 числа, соответственно. Нам нужно посчитать сумму этих двух чисел.
Диапазон
0 ≤ a, b ≤ 10^10000
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.12.2015, 10:59
Ответы с готовыми решениями:

Длинная арифметика. Сложение
Задача такова: Два числа вводятся с клавиатуры, каждое в своей строке. Числа не превышают 1010000. Произвести сложение чисел. Числа...

Сложение огромных чисел. Длинная арифметика
Здравствуйте!Подскажите,пожалуйста,каким образом в паскале складывать огромные числа,которые выходят за пределы типов данных? К примеру...

Длинная арифметика: как увеличить вместительность массива?
Важно! Я встретился с задачей, в которой происходит переход за диапазон переменной. Можете помочь?

3
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
30.12.2015, 11:09
Добавлено через 37 минут
Смотрите похожие темы внизу страницы, например эту
Длинная арифметика. Сложение
Если мало, в поиске по запросу Сложение длинных чисел.
0
0 / 0 / 0
Регистрация: 30.12.2015
Сообщений: 16
30.12.2015, 11:44  [ТС]
Проблема в том, что тот код немного не работает. Слишком много времени уходит на один из тестов. Нужно как-нибудь, сделать только через string.
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
47
48
var
  c: char;
  a, b, o: array[1..10003] of byte;
  na, nb, i, l, x: longint;
 
begin
  repeat
    read(c);
    if c in ['0'..'9'] then
    begin
      inc(na); 
      a[na] := ord(c) - 48;
    end;
  until (c = #13) or (na = 10002);
  {-----------------------------------------------------------------------------------------}
  repeat
    read(c);
    if c in ['0'..'9'] then
    begin
      inc(nb);
      b[nb] := ord(c) - 48;
    end;
  until (c = #13) or (nb = 10002);
  if na > nb then l := na
  else l := nb;
  if (na > nb) then l := na else l := nb;
  {==========================================================================================}
  for i := 1 to na div 2 do
  begin
    x := a[i];
    a[i] := a[na - i + 1];
    a[na - i + 1] := x;
  end;
  for i := 1 to nb div 2 do
  begin
    x := b[i];
    b[i] := b[nb - i + 1];
    b[nb - i + 1] := x;
  end;
  {==========================================================================================}
  for i := 1 to l do
  begin
    o[i] := o[i] + a[i] + b[i];
    if (o[i] > 9) then begin o[i + 1] := trunc(o[i] / 10); o[i] := o[i] mod 10; end;
  end;
  if (o[l+1] > 0) then inc(l);
  for i := l downto 1 do write(o[i]); writeln;  
end.
0
8 / 3 / 4
Регистрация: 04.10.2015
Сообщений: 18
31.12.2015, 16:36
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Взято из книги "Песни о Паскале"
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
{ Процедура распечатки сверхбольшого числа} 
procedure WriteBigNumber(var F: text; const aNum: TBigNumber); 
var i : integer; 
begin 
i:=CSize; 
while (i>0) and not (aNum[i] in ['1'..'9']) do Dec(i); 
if i=0 then Write(F, '0'); 
while i>0 do begin 
Write(F, aNum[i]); 
Dec(i); 
end; 
Writeln(F); Writeln(F); 
end; 
{ Процедура сложения сверхбольших чисел в столбик. 
Результат помещается в первое число, что равносильно оператору сложения
aNum1 := aNum1 + aNum2 } 
procedure AddNumbers(var aNum1, aNum2 : TBigNumber); 
var  i,j : integer; 
n1, n2 : integer;  { слагаемые цифры} 
sum, ovr : integer;  { сумма и перенос}  
begin 
ovr:=0; { в начале переполнение= 0 } 
{ цикл по всем цифрам, кроме последней} 
for i:=1 to CSize-1do begin 
j:=i;  { j используется после завершения цикла} 
{ Если в текущей позиции пробел, то считаем его нулем, 
а иначе символ цифры преобразуем в цифру 0..9 } 
if aNum1[i]=' ' 
then n1:=0 
else n1:=Ord(aNum1[i])-Ord('0'); { n1 = 0..9 } 
if aNum2[i]=' ' 
then n2:=0 
else n2:=Ord(aNum2[i])-Ord('0'); { n2 = 0..9 } 
sum:= (n1+n2+ovr) mod 10; { сумма sum = 0..9 } 
ovr:= (n1+n2+ovr) div 10; { перенос ovr = 0 или 1 } 
{ Преобразуем цифру в символ цифры} 
aNum1[i]:= Char(sum + Ord('0')); 
end; 
{ Если было переполнение, то за последней цифрой помещаем единицу} 
if ovr<>0 then aNum1[j+1]:='1'; 
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.12.2015, 16:36
Помогаю со студенческими работами здесь

Длинная арифметика - Показать прибыль или убытки за 1й и 2й месяц
Дано 2 числа по модулю не больших 10^30. Зарплата и деньги, которые нужно заплатить за кредит. Показать прибыль или убытки за 1й и 2й...

Длинная арифметика, перевод чисел другие системы счисления
Добрый вечер программисты ,у меня есть один ,наверно сложный, вопрос, проблема вот в чем когда я начал писать программу, то я не...

Длинная арифметика. Сложение. Вводятся два числа длиной 0<n<255 . Найти сумму этих чисел
Программа работает, но выходит ошибка, если размеры строк различаются, как ее исправить, помогите, пожалуйста) program qq; const...

Длинная арифметика
Вычислить точное значение суммы 1^2 + 2^2 +3^2 +...+ n^2 (n&gt;1999). Задачу необходимо выполнить именно с длинно арифметикой.. надеюсь на...

Длинная арифметика
Пожалуйста помогите! Нужно найти n!!,(произведение всей четных чисел от 2 до n,если n четно и всех нечетных от 1 до n,если n нечетно)...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru