马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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类型呢?
希望能指点一下,我也是搜了好久没搜到才麻烦大家的 |