|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 努力的松 于 2021-9-28 22:59 编辑
如何用double解决类型溢出?| 实际问题:连续阶乘求和 | C语言
实际问题:
输入一个正整数N,求1!+2!+3!+...+N! 提示:由于>10的整数的阶乘非常大,已超出整数的表示范围,故求阶乘时,需要将变量定义为double类型。 【学校OJ题干如是说】
如果用long long int 也可以,如下:- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int n;
- int i;
- long long int a; //开大数
- long long int sum;
- while((scanf("%d",&n))!=EOF&&n<=50) //多个输入
- {
- for(a=1.0,sum=0.0,i=1;i<=n;i++)
- {
- a=a*i;
- sum+=a;
- }
- printf("%lld\n",sum);
- }
- return 0;
- }
复制代码
我尝试的改法:- #include <stdlib.h>
- int main()
- {
- int n;
- int i;
- long long int a; //开大数
- double sum;
- while((scanf("%d",&n))!=EOF&&n<=50) //多个输入
- {
- for(a=1.0,sum=0.0,i=1;i<=n;i++)
- {
- a=a*i;
- sum+=a;
- }
- printf("%d\n",(int)sum);
- }
- return 0;
- }
复制代码 提交之后却显示编译错误(在OJ里面是这样。但我用Dev c++可以编译运行)
该怎样改为double类型呢?
希望能指点一下,我也是搜了好久没搜到才麻烦大家的 |
|