Во втором питоне было ещё деление на целые числа и длинные целые числа (был тип long)
Во втором питоне
>>> int
<type 'int'>
>>> long
<type 'long'>
>>>
>>> 1L
1L
>>>
В третьем питоне оставили только long и удалили разделение.
В третьем питоне
>>> int
<class 'int'>
>>> long
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'long' is not defined
>>>
>>> 1L
File "<stdin>", line 1
1L
^
SyntaxError: invalid syntax
>>>
GoshkaLP
Нужно ли в такой задаче писать алгоритм сложения длинных чисел
Нужно. Это полезно, так как не во всех языках есть длинные числа, как в питоне. Ты учишься программированию, используя питон для обучения, но это не значит, что полученные при этом обучении навыки программирования ты будешь потом применять, разрабатывая на том же языке, на котором учился программировать. Это сплошь и рядом происходит.
Вот пример в awk
[guest@localhost ~]$ echo "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222" | awk '{ print $1 + $2 }'
3333333333333332738786672957290036516299633913475458249124829501869439173452657107303061593549438976
[guest@localhost ~]$
Как следует из примера, awk не может сложить стозначное число из единиц со стозначным числом из двоек (должно получиться стозначное число из троек). Но если у нас программа уже на awk написана и туда надо добавить сложение таких чисел, потому что они вдруг начали приходить в программу? Можно написать функцию в awk, которая сделает сложение в длинных числах.
Пример с усечённой функцией
(функция работает только для небольшого числа входных чисел)
[guest@localhost ~]$ echo "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222" | awk '
>
> { print f($1, $2) }
>
> function f(a, b, arr1, arr2, out) {
> for (i = 1; i <= length(a); i++) {
> arr1[i] = substr(a, i, 1)
> }
> for (i = 1; i <= length(b); i++) {
> arr2[i] = substr(b, i, 1)
> }
> for (i = 1; i <= length(a); i++) {
> out = out arr1[i] + arr2[i]
> }
> return out
> }
>
> '
3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
[guest@localhost ~]$
[guest@localhost ~]$ echo "1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222" | awk '
> { print $1, "+", $2, "=", f($1, $2) }
>
> function f(a, b, arr1, arr2, out) {
> for (i = 1; i <= length(a); i++) {
> arr1[i] = substr(a, i, 1)
> }
> for (i = 1; i <= length(b); i++) {
> arr2[i] = substr(b, i, 1)
> }
> for (i = 1; i <= length(a); i++) {
> out = out arr1[i] + arr2[i]
> }
> return out
> }
>
> '
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 + 2222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 = 3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
[guest@localhost ~]$
Видишь, функцию набросал - и дальше можешь делать дело. А если функцию не можешь написать, потому что в тот раз давным давно в питоне уже было всё готовое и ты поленился писать функцию (включать мозги, тратить время), то при первой же проблеме в реальной программе ты просто не сможешь поправить баг и программа станет непригодной для новых условий. Будешь пользователям своим писать, которые тебе вопросы про ошибки с длинными числами присылают, мол “извините, для длинных чисел эта программа не работает, и я не планирую её для длинных чисел дорабатывать”, а сам просто знать не будешь, как её доработать, потому что на этапе обучения проскочил эту тему. Естественно, переписать на питон какую-нибудь громадную программу за пять минут не получится.