在32位系统下,整形最大保存数据为正负2147483647,故当两个数据相加有可能会出现溢出的情况,此时就需要注意数据的大小判定,避免出错
解决如下问题:https://www.hackerrank.com/challenges/a-very-big-sum/problem
#!/bin/python3
import sys
def aVeryBigSum(n, ar):
# Complete this function
sumall = 0
num = 0
for i in [0,1,2,3,4]:
sumall = sumall + ar[i]
while sumall > 1000000000:
num += 1
sumall = sumall - 1000000000
#print(sumall)
len_num = 9-len(str(sumall))
answer = str(num) + "0"*len_num + str(sumall)
return answer
n = int(input().strip())
ar = list(map(int, input().strip().split(' ')))
result = aVeryBigSum(n, ar)
print(result)
但是以上仅是针对某一类型数据,并没有做到对所有数据的支持,还有一小部分加法形式例如 2000+2147483600依旧会溢出
如下再次修改,对被加数进行验证即可:
#!/bin/python3
import sys
def aVeryBigSum(n, ar):
# Complete this function
sumall = 0
num = 0
for i in [0,1,2,3,4]:
add_num = ar[i]
while add_num > 1000000000:#判定被加数大小,避免溢出
num += 1
add_num = add_num - 1000000000
sumall = sumall + add_num
while sumall > 1000000000:#当数量过多也会溢出,避免溢出
num += 1
sumall = sumall - 1000000000
len_num = 9-len(str(sumall))
answer = str(num) + "0"*len_num + str(sumall)
return answer
n = int(input().strip())
ar = list(map(int, input().strip().split(' ')))
result = aVeryBigSum(n, ar)
print(result)
如上已经可以做到32位系统下的长整型加法
如有错误及优化 望指正
浙公网安备 33010602011771号