| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 45809 人关注过本帖
标题:求1!+2!+3!+4!+……+20!
只看楼主 加入收藏
lei85222
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-7-30
收藏
得分:0 
这个再谭浩强的书里面有讲
2009-10-06 11:29
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
程序代码:
#include<stdio.h> 
main() 
{ 
    long double s1=1,s2=0; 
    int i,y; 
    scanf("%d",&y); 
    for(i=1;i<=y;i++) 
    { 
        s1*=i; 
        s2+=s1;  
    }  
    printf("%e",s2);   
  getch(); 
} 
这个能算到170!
2009-10-24 22:06
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
#include <stdio.h>
 
main()
{
 int i,n;
 long sum=1,total=0;
 for(n=1;n<=20;n++)
  {
   for(i=1;i<=n;i++) sum=sum*i;
   total=total+sum;
   sum=1;
  }
 printf("total=%ld",total);
 getch();
}
这样做对不对?我求得的结果是total=268040729。

//结果不对。溢出了。实践证明,在WIN-TC下用此程序最大可加到12!,结果522956313正确。再加就溢出了。
//与谭浩强书中long的取值范围-2147483648——2147483647相符合。
//当然可以用unsigned long取值范围可到0——4294967295。不过还是计算不出13!,加到13!结果为6749977113。


[ 本帖最后由 zqb7899 于 2009-10-25 13:05 编辑 ]
2009-10-24 22:34
华飞
Rank: 2
等 级:论坛游民
帖 子:18
专家分:18
注 册:2009-10-23
收藏
得分:0 
#include<stdio.h>
int main(void)
{
    int i,fact,sum;
    fact=1;sum=0;
    for(i=1;i<=20;i++){
        fact=fact*i;
        sum=sum+fact;
    }
    printf("%d",sum);
    return 0;
}
2009-10-25 02:16
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:0 
/*求1!+2!+3!+4!+……+20!
*/
#include <stdio.h>
#define N 20
 
int main()
{
    float i,s=1,res=0;
 
    for(i=1; i<=N; i++)
    {
        s*=i;
        res+=s;
    }
 
    printf("%d\n",res);
 
    return 0;
}
2009-10-25 04:26
fgchg911
Rank: 4
等 级:业余侠客
威 望:1
帖 子:131
专家分:204
注 册:2009-9-6
收藏
得分:0 
回复 63楼 zqb7899
long溢出
2009-10-25 04:27
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
回复 65楼 fgchg911
程序代码:
#include <stdio.h> 
#define N 20 

int main() 
{ 
    float i,s=1,res=0; 

    for(i=1; i<=N; i++) 
    { 
        s*=i; 
        res+=s; 
    } 

    printf("%d\n",res); 

    return 0; 
} 
这个程序也溢出
程序代码:
#include<stdio.h>
int main(void)
{
    int i,fact,sum;
    fact=1;sum=0;
    for(i=1;i<=20;i++){
        fact=fact*i;
        sum=sum+fact;
    }
    printf("%d",sum);
    return 0;
} 
这个能算到20!但是更大的数就会溢出

[ 本帖最后由 jiangwu10057 于 2009-10-25 08:56 编辑 ]
2009-10-25 08:54
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
      
1    1     1
2    2     3
3    6     9
4    24     33
5    120     153
6    720     873
7    5040     5913
8    40320     46233
9    362880     409113
10    3628800     4037913
11    39916800     43954713
12    479001600     522956313
13    6227020800     6749977113
14    87178291200     93928268313
15    1307674368000     1401602636313
16    20922789888000     22324392524313
17    355687428096000     378011820620313
18    6402373705728000     6780385526348310
19    121645100408832000     128425485935180000
20    2432902008176640000     2561327494111820000
这是用EXCEL计算出的,也不准确,从18!开始不准确。

[ 本帖最后由 zqb7899 于 2009-10-25 13:23 编辑 ]
2009-10-25 12:45
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
改为double型:
#include <stdio.h>  
 
main()  
{  
int i,n;  
double sum=1,total=0;  
for(n=1;n<=20;n++)  
  {  
   for(i=1;i<=n;i++) sum=sum*i;  
   total=total+sum;  
   sum=1;  
  }  
printf("total=%f",total);  
getch();  
}
计算结果为:total=2561327494111820290.000000
根据谭浩强书中,double型其有效数字为15至16位,数值范围-1.7e-308至1.7e308。
结果是19位,也就是说最后3至4位数不正确。


[ 本帖最后由 zqb7899 于 2009-10-25 13:25 编辑 ]
2009-10-25 13:14
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
改为float型:
#include <stdio.h>   
 
main()   
{   
int i,n;   
float sum=1,total=0;   
for(n=1;n<=20;n++)   
  {   
   for(i=1;i<=n;i++) sum=sum*i;   
   total=total+sum;   
   sum=1;   
  }   
printf("total=%f",total);   
getch();   
}  
计算结果为:total=2561327455189073920.000000
根据谭浩强书中,float型其有效数字为6至7位。数值范围-3.4e-38至3.4e38。
结果是19位,也就是说最后12至13位数字都不正确。



[ 本帖最后由 zqb7899 于 2009-10-25 13:24 编辑 ]
2009-10-25 13:17
快速回复:求1!+2!+3!+4!+……+20!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017097 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved