【发布时间】:2020-12-28 04:04:12
【问题描述】:
尝试学习 C 我正在玩一些 for 循环和求和。我想在不使用数学公式n(n+1)/2 的情况下计算第一个n 自然数的总和。我有这个代码:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 100;
int sum = 0;
for (int ix = 0; ix <= n; ix++) {
sum = sum + ix;
}
printf("Sum of the first %d natural numbers is %d\n", n, sum);
}
所以对于n = 100,我得到的总和是5050,这是正确的。当我使用n = 10000 时,我也得到了正确的答案,但是如果我去例如n = 1000000,那么我会得到sum = 1784293664,但正确的答案应该是sum = 500000500000。
为什么当n 变大时我的程序停止工作?n = 1000000 时显示的总和是多少?
【问题讨论】:
-
这能回答你的问题吗? C integer overflow
-
printf("%f\n", (n * (n + 1.0)) / 2); -
如果你使用 unsigned int,你可以将最大值加倍,但它仍然会溢出你想要做的事情。你能做的最好的就是 unsigned long long int,除非你有创意并使用一个额外的变量来存储最高有效数字,一旦它们对于数据类型来说太大了(只要知道它们实际上被除以 10 )。例如。 2878 可以是 num1 为 2 和 num2 为 878。en.wikipedia.org/wiki/C_data_types
-
@chux-ReinstateMonica 我的意思是溢出前的最大输出,但是是的,只有溢出前最大输入 n 的大约 1.414 倍。数学很好。
标签: c loops for-loop sum integer