我想使用循环计算 1 到 n 的总和,这是我的 C 代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
long sum = 0;
int n = atoi(argv[1]);
for(int i = 1; i<= n; i++)
sum += i;
printf("Sum of serial from 1 to %d = %ld\n", n, sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我用小 n 运行程序时,结果是正确的,但当我用大数字运行时,结果是错误的。这是我运行此命令时的结果:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
long sum = 0;
int n = atoi(argv[1]);
for(int i = 1; i<= n; i++)
sum += i;
printf("Sum of serial from 1 to %d = %ld\n", n, sum);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它看起来long在您的环境中是 32 位长,它可以容纳的最大值是 2,147,483,647。1 到 100,000 的整数之和为 5,000,050,000,超出了限制。
在C99及更高版本中,可以使用long longtype,其最大值至少为9,223,372,036,854,775,807。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
long long sum = 0;
int n = atoi(argv[1]);
for(int i = 1; i<= n; i++)
sum += i;
printf("Sum of serial from 1 to %d = %lld\n", n, sum); // use %lld to print "long long" value
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int64_ttype ininttypes.h可能会被更多编译器支持。
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int main(int argc, char *argv[]){
int64_t sum = 0;
int n = atoi(argv[1]);
for(int i = 1; i<= n; i++)
sum += i;
printf("Sum of serial from 1 to %d = %" PRId64 "\n", n, sum); // use PRId64 macro to print "int64_t" value
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |