[洛谷][vs 2019] [c语言] 相同输入,输出不同
本帖最后由 smarth 于 2020-11-15 16:35 编辑在洛谷上刷题目,求阶乘之和。
代码:
#include<stdio.h>
int factial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factial(n - 1);
}
int main(void)
{
int n;
unsigned long long s = 0;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) {
s += factial(i);
}
printf("%llu\n", s);
return 0;
}
在vs中输入22,输出2845178393
而洛谷显示输入22,输出1177652997443428940313
好多次了,我在本地ide答案好好的,洛谷是另一种输出。
求解答!!!
/**
**谢谢各位啦,原因是数值溢出。这道题数目太大,不能单纯计算,我去找其他思路了
**/ 部分数值在不同的系统环境下 输出的结果也不同 上面的函数返回值是int类型,n比较大的时候会溢出 #include<stdio.h>
unsigned long long factial(int n) {
//你改一下这个返回值类型为unsigned long long,输入22时,得到的结果是15508120799727188505,很明显连unsigned long long这个数据类型也溢出了
if (n == 0 || n == 1)
return 1;
else
return n * factial(n - 1);
}
int main(void)
{
int n;
unsigned long long s = 0;
scanf_s("%d", &n);
for (int i = 1; i <= n; i++) {
s += factial(i);
}
printf("%llu\n", s);
return 0;
} EzGDNull 发表于 2020-11-15 16:06
#include
unsigned long long factial(int n) {
//你改一下这个返回值类型为unsigne ...
谢谢。
这道题似乎不能用这个思路做。
我调试后发现22!本身在unsigned long long里,但阶乘之和就溢出了。需要找其他思路
再次感谢
页:
[1]