Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/68: Рейтинг темы: голосов - 68, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 10

Сложение длинных чисел

27.01.2011, 13:24. Показов 14177. Ответов 14

Студворк — интернет-сервис помощи студентам
Помогите срочно! Нужно составить программу, суммирующую два натуральных n-значных числа ,где n>20. Думал так
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
program lab15;
uses crt;
var
n,n1:byte;
sum,y,err:integer;
function zvezda(n:byte):real;
   var i:integer;
       s:string[80];
    begin
     i:=1;
     s:='';
      while i<=n do
       begin
        s:=s+'1';
         inc(i);
       end;
     writeln(s);  Val(s[80],y,err);   writeln('Summa =',y);[
    end;
begin clrscr;randomize;
writeln('1 chislo =');
read(n);
writeln('2 chislo =');
read(n1);
writeln('1 sformirovannoe = ');
zvezda(n);
writeln('2 sformirovannoe = ');
zvezda(n1);
sum:=y+n1;;
writeln('Summa =',y);
readkey
end.
Но не могу перевести строку в переменную, для дальнейшего сложения двух числе.

Добавлено через 11 часов 15 минут
Помогите пожалуйста сделать!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.01.2011, 13:24
Ответы с готовыми решениями:

Сложение длинных чисел
Задачка: Сложить два 50-значных десятичных числа. Она довольно-таки простая и я её сделал, она работает, но хотелось бы ее как-нибудь...

Сложение длинных чисел
Мне нужно сложить в паскале длинные числа (до 255 символов в строке). Исходные данные: в двух строках по одному длинному целому...

Сложение длинных чисел
Складываются числа &quot;столбиком&quot; просто. Сумма цифр больше 9 - перекидываем плюс единичку в следующий разряд и так далее. Исходные...

14
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.01.2011, 13:47
Нужно строку преобразовать в массив цифр. Хотя можно и со строками работать. Вот пример с массивами.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
uses crt;
var s1,s2:string;
    a,b,c:array[byte] of byte;
    na,nb,i,t,j,n,p:integer;
    k:integer;
begin
clrscr;
write('Vvedite chislo A:');
readln(s1);
write('Vvedite chislo B:');
readln(s2);
na:=length(s1);
nb:=length(s2);
for i:=1 to na do
  begin
    val(s1[i],t,k);
    a[i]:=t;
  end;
for i:=1 to nb do
  begin
    val(s2[i],t,k);
    b[i]:=t;
  end;
if na>nb then
  begin
    n:=na;
    for i:=1 to na-nb do
      begin
        nb:=nb+1;
        for j:=nb downto 2 do
        b[j]:=b[j-1];
        b[1]:=0;
      end;
   end
else if nb>na then
   begin
     n:=nb;
     for i:=1 to nb-na do
       begin
         na:=na+1;
         for j:=na downto 2 do
         a[j]:=a[j-1];
         a[1]:=0;
       end;
    end
else if nb=na then n:=na;
p:=0;
for i:=n downto 1 do
  begin
   c[i]:=a[i]+b[i]+p;
   if (c[i]>9)and(i>1) then
      begin
       c[i]:=c[i] mod 10;
       p:=1;
      end
    else p:=0;
  end;
if c[1]>9 then
  begin
    c[1]:=c[1] mod 10;
    n:=n+1;
    for j:=n downto 2 do
    c[j]:=c[j-1];
    c[1]:=1;
  end;
writeln('Chislo C:');
for i:=1 to n do
write(c[i]);
readln
end.
Добавлено через 5 минут
Вот пример без массивов.
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
uses crt;
var   s1,s2,s3: string;
      mem,i,l,c: integer;
begin
  writeln('Enter first numb '); readln(s1);
  writeln('Enter second numb '); readln(s2);
  mem:=0;
  s3:='';
  if length(s1)>length(s2) then l:=length(s1)
  else                          l:=length(s2);
  if length(s1)>length(s2) then
    for i:=length(s2) to l-1 do
      Insert('0',s2,1);
  if length(s1)<length(s2) then
    for i:=length(s1) to l-1 do
  Insert('0',s1,1);
  for i:=l downto 1 do
   begin
    c:=strtoint(s1[i])+strtoint(s2[i])+mem;
    mem:=c div 10;
    insert(inttostr(c mod 10),s3,1);
   end;
  if mem>0 then insert('1',s3,1);
  write(s3);
  readln;
end.
1
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 10
27.01.2011, 14:27  [ТС]
Выручил, просто огромное спасибо! Но это не совсем то...

Добавлено через 36 минут
А как Val-ом преобразовать, для дальнейшего сложения чисел???? Как не пробовал, не получается..
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.01.2011, 14:39
777777, Числа не входящие в тип Longint нельзя преобразовать, для того и применяют длинную арифметику, иначе зачем вообще число вводить строкой?
0
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 10
27.01.2011, 14:51  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
777777, Числа не входящие в тип Longint нельзя преобразовать, для того и применяют длинную арифметику, иначе зачем вообще число вводить строкой?
Ты меня запутал, не можешь кодом помочь? Мне к 16 сдавать все эти работы...
Нашел вот такой(кажется твой пример), но не понимаю, как сделать под свои длины чисел, чтоб эта цифра определяла их значность....
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
program nn;
var x,x1:string;
y,y1,sum:integer;
function str2int(var S: string):integer;
var
n,t:integer;
begin
n:=1;
while n<>length(S) do
if S[n] in ['0'..'9'] then inc(n) else delete(S,n,1);
val(S,n,t);
str2int:=n;
end;
begin
writeln('vvedite stroku'); readln(x);
writeln('vvedite stroku'); readln(x1);
y:=str2int(x);
writeln(y);
 
y1:=str2int(x1);
writeln(y1);
sum:=y+y1;
   writeln(sum);
readln;
end.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
27.01.2011, 15:00
Цитата Сообщение от 777777 Посмотреть сообщение
не можешь кодом помочь
Ты что? Я тебе 2 варианта выложил. А если тебе нужно задать значность, то начни с этого
Pascal
1
2
3
4
5
6
7
8
9
repeat
write('Введите количество знаков чисел ,  от 21 до 255 n=');
readln(n);
until n in [21.255];
writeln('Введите первое число:');
for i:=1 to n do
 repeat
  readln(a[i]);
 until a[i] in ['0'..'9'];
также второе число.
Проверку на то какое длиннее убери. Я что ли за тебя думать и писать должен?
0
0 / 0 / 0
Регистрация: 25.01.2011
Сообщений: 10
27.01.2011, 15:03  [ТС]
Да это не упрек был, а вопрос, извини если что!!=)
0
0 / 0 / 0
Регистрация: 04.12.2019
Сообщений: 1
04.12.2019, 04:45
Pascal
1
2
3
4
5
6
Var s,ss:string;
Begin
Readln (s);
Readln (ss);
Write (s.ToBigInteger+ss.ToBigInteger);
End.
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
04.12.2019, 05:34
Аймедин, Аймедин, Ты наверное умный, но это раздел Турбо Паскаль.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
04.12.2019, 05:36
Аймедин, в TP этого нет!
0
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
06.12.2019, 03:34
Puporev, нет в TP strtoint и inttostr. Только val и str.
Цитата Сообщение от 777777 Посмотреть сообщение
как Val-ом преобразовать, для дальнейшего сложения чисел?
Никак. У Вас по заданию в числах должно быть более 20 разрядов. Поэтому никакого val.

Val может преобразовать числа до 232-1=4294967295 - это максимум для типа longword. 9 честных десятичных разрядов. Максимум, что можно получить от стандартных типов - это применить для хранения целого числа мантиссу вещественной переменной типа extended. Тогда без потери разрядов возможно сохранить целое число до 264-1=18446744073709551615. 19 честных десятичных разрядов.

Предвосхищая возражения. Текстовое представление десятичной цифры проще преобразовать в число как ord(p)-ord('0'), либо (что то же самое) как ord(p)-48. А лучше совсем не преобразовывать, прямо со строковым представлением и работать.

Вот максимально короткая программа для Turbo Pascal, которая может складывать числа длиной до 254 десятичных разрядов:
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
var
  x, y: string;
  i: integer;
 
begin
  write('x = ');
  readln(x);
  write('y = ');
  readln(y);
  while length(y) < length(x) do y := '0' + y;
  while length(x) <= length(y) do x := '0' + x;
  for i := length(x) downto 2 do
    begin
      inc(x[i], ord(y[i - 1]) - ord('0'));
      if x[i] > '9' then
        begin
          dec(x[i], 10);
          inc(x[i - 1])
        end
    end;
  if x[1] = '0' then delete(x, 1, 1);
  write('x + y = ', x);
  readln
end.
Вряд ли у кого-либо получится на Turbo Pascal написать проще.

Значность чисел вводить незачем. Вводите подряд без пробелов и иных знаков цифры первого числа, не обращая внимания на возможные автопереносы на новую строку, и нажимаете <Enter>, далее так же вводите цифры второго числа. После нажатия <Enter> будет выведен результат сложения.

Примечание: в программе нет проверки вводимых данных.
0
07.12.2019, 10:12

Не по теме:

Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Puporev, нет в TP strtoint и inttostr. Только val и str.
Cyborg Drone, не смущает 2011 год?

0
07.12.2019, 10:41

Не по теме:

Цитата Сообщение от mr-Crocodile Посмотреть сообщение
не смущает 2011 год?
В 2011 году в ТП тоже не было strtoint и inttostr...

0
07.12.2019, 10:58

Не по теме:

Цитата Сообщение от Puporev Посмотреть сообщение
В 2011 году в ТП тоже не было strtoint и inttostr...
согласен. :):):)
но я на это сообщение отвечу через 9 лет, в 2028 году ;)

0
Модератор
10361 / 5635 / 3394
Регистрация: 17.08.2012
Сообщений: 17,197
07.12.2019, 15:57
Во всём виноват некропостер Аймедин. Это он поднял тему.

Да и ничего страшного нет: дать хороший ответ в древней теме не возбраняется.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2019, 15:57
Помогаю со студенческими работами здесь

Сложение двух длинных целых чисел представленных в виде строк
напишите программу сложение двух длинных целых чисел представленных в виде строк(считать из текстового файла), используя при этом...

Деление длинных чисел
Привет! Нужно дополнить программу, чтобы выводилось частное этих факториалов. Var a,a2:array of int64; ...

Сумма длинных чисел
Посчитать сумму двух положительных чисел. Входные данные Два числа A и B в одной строке. Выходные данные Сумма чисел A+B. ...

Вычитание длинных чисел
нужно вычесть два длинных числа. код есть, но не могу найти ошибку: var a,b,c:array of integer; x,i,n,m,k,l,j:longint; ...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru