#include
int main(void)
{
int s,i,sum=0;
s=1;
for(i=1;i<=20;i++)
{s*=i;
sum+=s;} //for需要包含这两句
printf("%ld\n",sum);
}
这个程序是大数问题。20的阶乘是一个很大的数
程序我给你改后事没有问题,但是这个是因为溢出了,所以成为负数,要是long long int 还装不下,那么你就要考虑用字符串来解决了
用int绝对是不行的,20!的结果是会超出int的上限的
而且long类型和int类型,在不同的编译器中表示的范围是不一样的。有的编译器里long与int表示的是同一个范围,都是用32为存储的。
建议用long long 或者unsigned long long 来进行存储,输出时用"%I64d"。不过我还试了一下double类型,貌似也不行呀。假如是特别大的数据,可以用字符串进行模拟,当然本题目是不用的。
#include
#include
int main()
{
long long i, sum, s;
// double i, sum, s;
s = 1;
sum = 0;
for(i=1; i<=20; i++)
{
s *= i;
sum += s;
}
printf("%I64d\n", sum);
return 0;
}
首先你用的int,存不下那么大的数,要用double.另外你的for循环没用{ },要把两句扩起来,不然for循环的范围只到第一个分号就结束了,后面的sum+=s没有被循环到
你计算过程都搞错了,
for(i=1;i<=20;i++)
s*=i;
sum+=s;
怎么可能是算
1!+2!+3!+4!+...+20!
这样只能算出20!
#include
double factorial(int num)
{
int i;
double dResult = 1.0;
for(i = 1; i <= num; ++i)
{
dResult *= i;
}
return dResult;
}
int main()
{
double dSum = 0.0;
int i;
for(i = 1; i <= 20; ++i)
{
dSum += factorial(i);
}
printf("The 20's factorial is %lf\n", dSum);
return 0;
}
#include
int main(void)
{
int i, j;
long sum=0;
long s=1;
for(i=1;i<=10;i++) // 你如果不知道什么时候溢出就先定义10,然后再加
{
// 这样才是算的阶乘
for (j = 1; j <= i; j++)
{
s*=j;
}
// 再累加和
sum += s;
}
printf("%ld\n",sum);
return 0; // main函数为int型记得添加返回值
}