爱问知识人 爱问教育 医院库

关于C语言求一串阶乘的和,求高手帮我看一下!

首页

关于C语言求一串阶乘的和,求高手帮我看一下!

求:1!+2!+3!+...+20!。
#include<stdio.h>
void main()
{
   long i=1,sum=0;  int m;
   for(m=1;m<=20;m++)
   {
      i=i*m;
      sum=sum+i;
   }
    Printf("sum=%ld\n",sum); 
}
这个程序应该挺简单的,这是我写的,但结果是错的。而正确的写法是第四行全部定义为long型,第十行输出格式为%e。
我觉得我写的应该不错。程序中明明是长整型,为什么要用float定义,最后用%e与否怎么会影响了结果的正确?

提交回答
好评回答
  • 2010-02-04 18:06:44
    如果对于小数字来说,这个代码没有问题。但在这个题中有问题。
    因为20以内的阶乘相加的结果远远超过长整形的位数。这个代码运算结果为268040729,但用科学计数法表示是2.56133e+18,确切的结果是2561327494111820313。也就是说,当长度超过时结果就会不正确。
    用浮点型是为了用科学计数法表示,科学计数法前面的那个2.56133是浮点型。而m可以不用float定义。
    如果想要得出精确的答案,可以把数放到数组中,在数组中运算结果。
    还有,你的题目里面有些地方打错了。“Printf”前面的“P”不能大写。倒数第三行应该写“float”而不是“long”。
    如果还有什么不明白的地方可以问我。

    风***

    2010-02-04 18:06:44

其他答案

    2010-02-03 13:10:23
  • LZ贴出来的代码没什么问题呀,是对的!
    如果第4行是long型,用%e输出是不对的。%e是浮点数科学记数法输出的格式。而且,既然是阶乘数累加,当然用长整型啦。
    

    心***

    2010-02-03 13:10:23

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新资料 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 179-198
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):