C++ 编程求1+2!+3!+4!+5!+···20!,计算结果不对,请问我编的程序问题在哪?

作为自学初学者,水平还比较低,不明白程序哪出现问题了,我验算了一下,1+2!+3!+4!+5!+···n! ,当n取<=10程序结果都正确,而取n>14时就错了,而且错得离谱
#include "stdio.h"
void main()
{ long int s=0, f=1,j=1;
for( ;j<=20; j++)
{f =f * j; // j自增1时,f相应的乘上(j+1),例如 当j=5时,f=5!
s = s+f; // 相应的,j每自增1,s=s+j!
}
printf("%d \n",sum);
}

没什么错就是,溢出了。这个数很大没法保存了。追问

我知道溢出了,所以对数据类型进行了不同定义,结果长整型和整形之间没啥差别,结果错得一模一样,,,
所以,应该怎么修改呢?谢谢

追答

long不一定比int大啊,可能都是4 byte,你试试用long long。

你知道溢出了你直接说溢出就好了呗,问题还写那么多没用的。

温馨提示:内容为网友见解,仅供参考
无其他回答

...编程的方法求x的值。指标要求(1)x=(1+2!+3!+4!+5!)\/5(2)用c编写...
(1) 混合编程的方法一般指将C\/C++语言与汇编语言结合使用,以充分利用汇编语言的性能优势来提高程序效率。但是对于这道题目来说,完全可以使用C语言来实现。下面是一种实现方式:(2) 主程的编写相对简单,只需要在main函数中添加上述代码即可。需要注意的是,计算阶乘时需要定义一个变量fact,初始化为1,...

C语言用函数迭代法编1!+2!+3+4!+5!的程序
include<iostream>using namespace std;int f(int n){if(n==0)return 1;else return n*f(n-1);}int main(){cout<<f(5)+f(4)+f(3)+f(2)+f(1)<<endl;return 0;}

...编写程序,求1到10的阶乘之和:S=1!+2!+3!+4!+5!+6!+7!+8!+9!+10...
include<stdlib.h> int main(){ int i=0;int j=0;int mul=1;int sum=0;for(i=1;i<=10;i++)\/\/和循环 { mul=1;\/\/每次循环前都需要初始化为1,要不然最后结果会变大 for(j=1;j<=i;j++)\/\/阶乘循环 { mul=mul*j;} sum=sum+mul;} printf("%d",sum);system("pause");retu...

用C语言编程求出1!+2!+3!+……+20!的值
} printf("1+2!+3!+…+20!=%d",sum);}

输入一个数n,求s=1!+2!+3!4!…+n!
我这是c++的,因为不知道你要什么程序:include <stdio.h> main(){ int i,sum,a,n;scanf("%d",&n);a=1;sum=0;i=1;for (i=1;i<=n;i++){ a=i*a;sum=sum+a;} printf("1!+2!+3!+...+%d!=%d\\n",n,sum) ;} ...

用c++求1+2+3+4+…100的编程代码
int main(){ int i,sum=0;for(i=0;i<100;i++)sum+=i;cout<<"sum="<<sum<<endl;} 参考资料:原创

寻找顺转数阵的c++程序,自己编的错误太多,好像不对,不知怎么编了,求...
1-> 2-> 3-> 4 | 516| 17 18 19 | 615| 24 25 20 | 714| 23 22 21 | 813| 12<-11<-10<- 9(2)内圈边长比外面相邻的一圈边长小 2。(3)单独处理边长为 0 的情况(也就是奇数矩阵最中心的那个数字,因为无法循环填写)。include<iostream>using namespace std;int ...

用c++编程 输入一个整数n,输出1!+2!+3!+……+n! 急急急急急!
先写出一个如下的函数:int fun(int n){ int s=1;for(int i=1;i<=n;i++)s*=i;return s;} 然后在主函数中调用反复调用它 int main(){ int n;while(cin>>n){ int sum=0;for(int i=1;i<=n;i++){ sum+=fun(i);} cout<<sum<<endl;} } ...

为什么我用C语言算1+2+3+4+5+6+7+8+9+10……+1000结果却是-23788?
好了,上面说的是short,但是由于您的编译器中int就是指的short (现在一般的int都是4字节了,也就是您编译器中对应的long )。[摘自百度百科] int , C语言,C++,C#,Obj-c等共有的一种数据类型,范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]。所以您可以将t的类型改成long,然后...

2 编程计算1!+2!+3!+..的前n项的和,n从键盘输入,要求:采用递归函数方法...
factorial 函数来计算每一项的阶乘,并将它们累加起来。在 main 函数中,从键盘输入一个整数n,然后调用 factorialSum 函数计算前n项阶乘的和,并将结果打印输出。请注意,阶乘的计算可能会涉及到很大的数值,所以在实际应用中可能需要使用大数计算库来处理阶乘的计算。此示例中仅适用于较小的n值。

相似回答