房天下 > 房天下问答 > 业主生活 > 其他
  • 关于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与否怎么会影响了结果的正确?

    提问者:笔记本家园

    发布于2011-01-11

共1个回答
  • dwb_lps 丨Lv 0
    如果对于小数字来说,这个代码没有问题。但在这个题中有问题。因为20以内的阶乘相加的结果远远超过长整形的位数。这个代码运算结果为268040729,但用科学计数法表示是2.56133e+18,确切的结果是2561327494111820313。也就是说,当长度超过时结果就会不正确。用浮点型是为了用科学计数法表示,科学计数法前面的那个2.56133是浮点型。而m可以不用float定义。如果想要得出精确的答案,可以把数放到数组中,在数组中运算结果。还有,你的题目里面有些地方打错了。“Printf”前面的“P”不能大写。倒数第三行应该写“float”而不是“long”。如果还有什么不明白的地方可以问我。
    +13 2011-01-11 举报
热门人气推荐
免责声明:问答内容均来源于互联网用户,房天下对其内容不负责任,如有版权或其他问题可以联系房天下进行删除。