python中1到N之间数字求和的问题
当我尝试用 python 计算 1 到 N 之间数字的总和时,我尝试了这段代码
N = int(input())
S = int(N*(N+1)/2)
print(S)
它运行良好,直到我尝试输入 N=641009859 预期结果应该是 = 205446819988104870 但结果是 = 205446819988104864
这里有什么问题?
回答
N * (N + 1) / 2做浮点除法,浮点数不能全部精确表示。做整数除法:N * (N + 1) // 2给你你所期望的 ( 205446819988104870)
补充阅读:每个计算机科学家都应该了解的关于浮点运算的知识
或者,您可以右移一位 ( N >> 1),这与除以二相同,因为二进制系统的工作方式。
(N >> 1) * (N + 1) 给出与以前相同的答案。