Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/104: Рейтинг темы: голосов - 104, средняя оценка - 4.96
-5 / 2 / 0
Регистрация: 29.01.2019
Сообщений: 278

Сложение и вычитание длинных чисел без длинной арифметики

05.02.2019, 00:41. Показов 19801. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишите процедуры для сложения и вычитания длинных чисел (не используя «длинную арифметику» Python).
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.02.2019, 00:41
Ответы с готовыми решениями:

Сложение и вычитание длинных чисел
Помогите, пожалуйста, составить программу для сложения и вычитания длинных чисел на Паскале

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

Как реализовать хранение длинных чисел, их сложение и вычитание?
Бесконечно длинных чисел.

8
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,697
Записей в блоге: 14
05.02.2019, 12:10
Лучший ответ Сообщение было отмечено Kadet12 как решение

Решение

Сложение:

Python
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
def longAdd(s1,s2):
     p=0
     l1=len(s1)
     l2=len(s2)
     i1=l1-1
     i2=l2-1
     res=""
     while(True):
         if ((i1<0) & (i2<0)):
             break
         if (i1<0):
             a2=int(s2[i2])+p
             p=a2//10
             a2=a2%10
             res=str(a2)+res
             i2-=1
             if (i2<0):
                break
         if (i2<0):
             a1=int(s1[i1])+p
             p=a1//10
             a1=a1%10
             res=str(a1)+res
             i1-=1
             if (i1<0):
                break
         a1=int(s1[i1])
         a2=int(s2[i2])
         r=a1+a2+p
         p=r//10
         r=r%10
         res=str(r)+res
         i1-=1
         i2-=1
     if (p>0):
         res=str(p)+res
     return res
     
s1="9999"
s2="8888"
r=longAdd(s1,s2)
print(r)
https://ideone.com/sR4cg4
1
-5 / 2 / 0
Регистрация: 29.01.2019
Сообщений: 278
05.02.2019, 21:21  [ТС]
А как вычитания сделать?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,697
Записей в блоге: 14
05.02.2019, 21:36
Это - посложнее чуть-чуть. Завтра сделаю.
1
-5 / 2 / 0
Регистрация: 29.01.2019
Сообщений: 278
05.02.2019, 21:43  [ТС]
Спасибо )Буду ждать
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,697
Записей в блоге: 14
06.02.2019, 09:33
Лучший ответ Сообщение было отмечено Kadet12 как решение

Решение

Вот, на скорую руку. По-хорошему, эти две функции должны быть взаимно-рекурсивными (чтобы можно было складывать/вычитать числа со знаком). Кроме того, нужно еще удалять незначащие нули в начале числа. Попробуй сделать все это сам.

Python
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
def longAdd(s1,s2):
     p=0
     l1=len(s1)
     l2=len(s2)
     i1=l1-1
     i2=l2-1
     res=""
     while(True):
         if ((i1<0) & (i2<0)):
             break
         if (i1<0):
             a2=int(s2[i2])+p
             p=a2//10
             a2=a2%10
             res=str(a2)+res
             i2-=1
             if (i2<0):
                break
         if (i2<0):
             a1=int(s1[i1])+p
             p=a1//10
             a1=a1%10
             res=str(a1)+res
             i1-=1
             if (i1<0):
                break
         a1=int(s1[i1])
         a2=int(s2[i2])
         r=a1+a2+p
         p=r//10
         r=r%10
         res=str(r)+res
         i1-=1
         i2-=1
     if (p>0):
         res=str(p)+res
     return res
 
def longSub(s1,s2):
    l1=len(s1)
    l2=len(s2)
    if (l1==l2):
        if s1[0]>s2[0]:
            sgn=1
            a1=s1
            a2=s2
        else:
            sgn=-1
            a1=s2
            a2=s1
    else:
        if (l1 > l2):
            sgn=1
            a1=s1
            a2=s2
        else:
            sgn=-1
            a1=s2
            a2=s1
 
    l1=len(a1)
    l2=len(a2)
    i1=l1-1
    i2=l2-1
    res=""
    b=0
    while(True):
        if ((i1<0) & (i2<0)):
            break
        if (i1<0):
            q2=int(a2[i2])-b
            p=q2//10
            q2=a2%10
            res=str(q2)+res
            i2-=1
            if (i2<0):
                break
        q1=int(a1[i1])
        q2=int(a2[i2])
        q=q1-b-q2
        if (q>=0):
            res=str(q)+res
            b=0
        else:
            q+=10
            b=1
            res=str(q)+res
        i1-=1
        i2-=1
        
    if (sgn==-1):
        res="-"+res
    return res
     
s1="9999"
s2="8888"
r=longAdd(s1,s2)
print(r)
 
s1="9999"
s2="8888"
r=longSub(s1,s2)
print(r)
 
s1="8888"
s2="9999"
r=longSub(s1,s2)
print(r)
 
s1="24"
s2="61"
r=longSub(s1,s2)
print(r)
https://ideone.com/gyy2YI
1
-5 / 2 / 0
Регистрация: 29.01.2019
Сообщений: 278
06.02.2019, 22:32  [ТС]
Спасибо большое)
0
29 / 21 / 8
Регистрация: 23.10.2018
Сообщений: 51
Записей в блоге: 3
07.02.2019, 10:23
Лучший ответ Сообщение было отмечено Kadet12 как решение

Решение

Сумма чисел:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def sum_num(a, b):
    a = '0' * (len(b) - len(a)) + a if len(b) > len(a) else a
    b = '0' * (len(a) - len(b)) + b if len(a) > len(b) else b
    r1 = 0
    result_sum = ''
    for i in range(len(a) - 1, -1, -1):
        c = str(int(a[i]) + int(b[i]) + r1)
        result_sum = c[-1] + result_sum
        r1 = '1' if len(c) > 1 else 0
    return r1 + result_sum if r1 == '1' else result_sum
 
 
af = input()
bf = input()
print(sum_num(af, bf))
Добавлено через 25 минут
сорри, поправил ошибку
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def sum_num(a, b):
    a = '0' * (len(b) - len(a)) + a if len(b) > len(a) else a
    b = '0' * (len(a) - len(b)) + b if len(a) > len(b) else b
    r1 = 0
    result_sum = ''
    for i in range(len(a) - 1, -1, -1):
        c = str(int(a[i]) + int(b[i]) + r1)
        result_sum = c[-1] + result_sum
        r1 = 1 if len(c) > 1 else 0
    return '1' + result_sum if r1 else result_sum
 
 
af = input()
bf = input()
print(sum_num(af, bf))
1
-5 / 2 / 0
Регистрация: 29.01.2019
Сообщений: 278
07.02.2019, 14:08  [ТС]
Спасибо большое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.02.2019, 14:08
Помогаю со студенческими работами здесь

Сделать сложение, вычитание, умножение и деление длинных чисел
В общем, задача такая, что надо сделать сложение, вычитание, умножение и деление длинных чисел. Сумму сделал, с вычитанием какая-то засада....

Сложение и вычитание длинных чисел: обеспечить работу с отрицательными числами
помогите пожалуйста сделать чтоб программа работала и для отрицательных чисел , и для 2х чисел разной длинны...неверный ответ выдает( ...

Реализовать сложение и вычитание длинных чисел ( количество символов бесконечно )
#include &lt;tchar.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;math.h&gt; float Sum(float s1, float s2)...

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru