| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:一枚小白,求大神指点!
只看楼主 加入收藏
(公子小白)
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-7-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
一枚小白,求大神指点!
问题是求1!+2!+3!+……+20!的和
我写的程序如下:
#include<stdio.h>
void main()
{
    double s=0,st=1,t,n;
    for(n=1;n<=20;n++)
    {
     for(t=n;t<=n;t--)
     
         st=st*t;
         s=s+st;
    }
    printf("1!+2!+3!+……+20!=%lf\n",s);

}


编译没错,运行却没结果!这是咋回事啊!!
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: double 
2013-07-24 22:33
fc176154001
Rank: 2
来 自:四川阆中
等 级:论坛游民
帖 子:87
专家分:96
注 册:2013-6-16
收藏
得分:4 
求阶乘没必要用浮点型数据啊,直接长整形就可以了,而且 for(t=n;t<=n;t--)这一句有问题,改成 for(t=n;t>=0;t--);


大神永远不能体会菜鸟们之间的惺惺相惜,
2013-07-24 22:46
(公子小白)
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-7-24
收藏
得分:0 
哦哦,是啊,t--就没有下限了!!谢大神指点了,恍然大悟!!
2013-07-24 22:57
月祭樱冢
Rank: 2
等 级:论坛游民
帖 子:83
专家分:97
注 册:2013-7-15
收藏
得分:4 
按照2楼的修改我没得到结果 不知道LZ怎么样
这是我改的
#include<stdio.h>
 int main()
 {  int n;
    long long sum=0;//long long vc6编译不了
    static long long st=1;//保留st上次的值
     for(n=1;n<=20;n++)
         st=n*st;
          sum=sum+st;
     printf("1!+2!+3!+……+20!=%d\n",sum);
     return 0;
 
}
 我用的VC6运行不了  打是只用长整型long的话n=20太大  n=10时运行没问题


算法是程序的灵魂
2013-07-25 01:00
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:4 
1!+2!+3!+……+20!我用计算器算出是19位
图片附件: 游客没有浏览图片的权限,请 登录注册

楼主的算法有错

思考赐予新生,时间在于定义
2013-07-25 01:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54061
注 册:2011-1-18
收藏
得分:4 
1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+11!+12!+13!+14!+15!+16!+17!+18!+19!+20!=2561327494111820313
而 C/C++ 标准的内建类型 unsigned long long(一般是64bits) 最大可表示到 18446744073709551615
所以如果你的编译器支持标准C/C++,用 uint64_t 吧
2013-07-25 09:10
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:4 
路过
         学习

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-07-28 17:06
mynameCX
Rank: 2
等 级:论坛游民
帖 子:7
专家分:13
注 册:2013-7-27
收藏
得分:4 
LZ的算法有问题,且在编译软件中这么大的数是溢出的
# include <stdio.h>
void main()
{
    int i, j, n = 1;
    double sum = 0.0;
    for(i = 1;i <= 20;i++)
    {
        for(j = 1;j <= i;j++)
        {
            n = n*j;
        }
        sum = sum + n;
        n=1;
    }
    printf("1!+2!……+20!=%d\n",sum);
}
n在算完求和之后,应该置1
2013-07-29 00:59
快速回复:一枚小白,求大神指点!
数据加载中...
 
   



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

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