首页 > 解决方案 > python中1到N之间数字求和的问题

问题描述

当我尝试使用 python 计算 1 到 N 之间的数字总和时,我尝试了这段代码

N = int(input())
S = int(N*(N+1)/2)
print(S)

它运行良好,直到我尝试输入 N=641009859 预期结果应该是 = 205446819988104870 但结果是 = 205446819988104864

这里有什么问题?

标签: python

解决方案


N * (N + 1) / 2做浮点除法,浮点数不能全部精确表示。做整数除法:N * (N + 1) // 2给你你所期望的 ( 205446819988104870)

补充阅读:每个计算机科学家都应该知道的关于浮点运算的知识

或者,您可以右移一位 ( N >> 1),这与除以 2 相同,因为二进制系统是如何工作的。

(N >> 1) * (N + 1)给出与之前相同的答案。


推荐阅读