永发信息网

C++编译程序:求1!+2!+3!+4!+…+20!

答案:6  悬赏:40  手机版
解决时间 2021-08-12 20:27

求1!+2!+3!+4!+…+20!  

我用win-tc编译的,编译没有错,调试不成功,求高人指点。以下是我自编内容:

 

#include "stdio.h"

void main()

{

    long int i,n,s;

    n=1;s=0;

    for(i=1;i<=20;i++)

    {

    n=n*i;

    s=s+n;

    printf("%ld",s);

    }

 

      getch();

}

最佳答案

不行,20!太大了,你得用float或double类型。


long int 只能表示到-2147483647到2147483647,最多到12!再往上就溢出,表示不了了

全部回答

循环算法不对

应该这样:

int n=1,sum=0;

for(int i=1;i<20;i++)   //循环计算1~20

{

  for(int j=1;j<=i;j++)  //计算1~20 每个数的阶乘

  {

    n=n*j;

  }

sum=sum+n;  //20个数的阶乘相加

}

不知上面的循环算法是否合理

其实还有一种方法,那就是用递归的方法,这样的话,是最明了的

数据溢出,20!至少相当于2的4次方乘(20-16+1)次,即2的20次方,再至少相当于2的3次方乘(15-8+1)次,即相当于2的24次方,因此从20*19*18....*8至少相当于2的44次方。。。unsign long 的数据可以表示的范围应该是0~4294967295(2^32),long型则还要被负数范围分去一半,float同样为单精度,无法超越机器的32位限制。如果换成双精度浮点型(double)应该能满足你的需要了。在X86平台上,INTEL提供扩展的double精度(扩展精度是80位,即10个字节),一般在C语言表示时,使用12个字节表示一个double,12个字节的精度表示起来也就是2的48次方……目前的微型机x86平台2的53次方是机器运算精确的极限。以上所指都指的是我们的微型机,不涉及大型计算机。

vc编译结果

很久没用TC了 你试一下用getchar函数替代getch函数,或添加conio.h头文件

这个东西是什么 http://www.19yxw.com/803890??????????? 、

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
n72串号是356966104853354 coreplayer的序列
怎样提高高中英语阅读理解和完行填空能力?
岳麓区长沙格美家电制冷维修哪位知道具体地址
冰心为她三个弟弟写作的一篇散文是什么
谁有侠盗飞车6狂野之城的下载地址?安全无毒
5230不能传大于手机内存的文件,想用蓝牙传个
请从哲学的角度分析,人与人之间从根本上来说
谁帮我找些靓号呢?
怎样锻炼脚趾
补充歇后语飞机上摆手,飞机上的客人(歇后语
23级的qq号码能卖多少钱
“圣诞老人会在圣诞节前夜抗着大布袋把礼物放
魏都区许昌世外桃园地址是什么,有没有知道的
诺基亚N85手机下载免费单机游戏的网址有那些
this is the voice of northeastern niversit
推荐资讯
扶沟县周口扶沟县大新美的空调专卖店地址有谁
什么时候有了互联网,最早的书出现在什么时候
someone is living in my heart 完整版的歌曲
男人要有钱,和谁都有缘..
过Q(2,3)引直线与圆x^2+y^2+8x+2y+8=0交于R,S
被油烫伤如何不留痕?
七英寸的电脑有多大多少厘米
马加大是什么字,马字旁加大是什么字
上海浦江的莱森的王教授怎么样?
QQ飞车最历害的人是谁?
大家推荐一下护肤品··(打广告的不要进来)
齐鲁师范学院电子信息工程技术专业在哪个校区
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?