| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 自学小白菜 于 2020-3-31 14:23 编辑  
 
这里是求e=1+1/1!+。。。+1/n!,指定n,输出结果。 
我的代码在前面都正确,但是,只要n大于一定的数(比如说输入50)就会错误。 
错误图片如下:
 
 
 
请问下,这个怎么出错的呢?还有怎么改呢? 
 
- #include <stdio.h>
 
  
- int jc(int n); //用于求阶乘
 
  
- int jc(int n)
 
 - {
 
 -         int i,result=1;
 
 -         
 
 -         for(i=n;i>0;i--)
 
 -         {
 
 -                 result*=i;
 
 -         }
 
 -         
 
 -         return result;
 
 - }
 
  
 
- int main(void)
 
 - {
 
 -         int n,i;
 
 -         double result,t=0;
 
 -         
 
 -         scanf("%d",&n);
 
 -         
 
 -         result=1.0;
 
 -         for(i=1;i<=n;i++)
 
 -         {
 
 -                 t+=1.0/jc(i);
 
 -         }
 
 -         printf("%f\n",result+t);
 
 -         
 
 -         return 0;
 
 - }
 
  复制代码 
 本帖最后由 sunrise085 于 2020-3-31 14:39 编辑 
因为溢出了! 
50 的阶乘是多少? 
int放不下这么大的数字了
 - //1、jc函数可用用unsigned long long 或者直接用double
 
 - //2、输出printf中应该用%lf double的有效位数是15位
 
 - #include <stdio.h>
 
 - unsigned long long jc(int n); //用于求阶乘
 
 - unsigned long long jc(int n)
 
 - {
 
 -         unsigned long long i,result=1;
 
 -         for(i=n;i>0;i--)
 
 -         {
 
 -                 result*=i;
 
 -         }
 
 -         return result;
 
 - }
 
  
- int main(void)
 
 - {
 
 -         int n,i;
 
 -         double result,t=0;
 
 -         scanf("%d",&n);
 
 -         result=1.0;
 
 -         for(i=1;i<=n;i++)
 
 -         {
 
 -                 t+=1.0/jc(i);
 
 -         }
 
 -         printf("%.14lf\n",result+t);
 
 -         
 
 -         return 0;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |