| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8197 人关注过本帖
标题:求c程序:用循环嵌套的方法求阶乘的和!
只看楼主 加入收藏
andy198719
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-24
收藏
 问题点数:0 回复次数:11 
求c程序:用循环嵌套的方法求阶乘的和!
求c程序:用循环嵌套的方法求阶乘的和!

1!+2!+3!+***+20!

[[it] 本帖最后由 andy198719 于 2008-9-24 00:45 编辑 [/it]]
搜索更多相关主题的帖子: 嵌套 阶乘 
2008-09-24 00:19
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
程序代码:
/*******************************************************************************

        求c程序:用循环嵌套的方法求阶乘的和!

      1!+2!+3!+***+20!

*******************************************************************************/
#include<stdio.h>
int main(void)
{
    int i,j;
    double  sum=0.0,sumx;
    for(i=1;i<=20;i++)
    {
        for(sumx=1.0,j=i;j>0;j--)
            sumx*=j;
        sum+=sumx;
    }
    printf("%.0lf\n",sum);
    getch();
}


刚才运行了一下,结果好象是不对。问题出在哪呢?还请各位多多指教,谢谢。

[[it] 本帖最后由 广陵绝唱 于 2008-9-24 03:25 编辑 [/it]]
2008-09-24 03:09
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
不一样么?我运行是一样的阿……

程序代码:
#include<stdio.h>
int main(void)
{
    int i, j;
    double sum = 0.0, sumx = 1.0;
    for (i = 1; i <= 20; i++)
    {
        sumx *= i;
        sum += sumx;
    }
    printf("%.f\n", sum);

    for (sum = 1.0, i = 1;i <= 20;i++)
    {
        for (sumx = 1.0, j = i;j > 0;j--)
            sumx *= j;
        sum += sumx;
    }
    printf("%.f\n", sum);
    return 0;
}


专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-24 03:51
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 3# StarWing83 的帖子
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    呵呵,也许是对自己太不自信了吧?本来我作的程序是你的头一种程序,但到网上搜了一下,发现全部是第二种模式,就给改成第二种了。

    不过从 5! ~ 20! 的尾数应该是0,所以它们的和的尾数应该总是3( 1! ~ 4! 和的尾数相加为3)。可是我的结果尾数却是0,却不知道对或是不对?
2008-09-24 06:52
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
我喜欢第一种
2008-09-24 07:16
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
多亏广陵兄的提醒,果然够仔细!
double已经溢出了,其数据精度不足以计算如此大的值,所以导致精度误差,我改成了64位长整形数,结果才正确:
程序代码:
#include<stdio.h>
int main(void)
{
    int i;
    long long sum = 0, sumx = 1;
    for (i = 1; i <= 20; i++)
    {
        sum += sumx *= i;
        printf("%d:%lld - %lld\n", i, sumx, sum);
    }
    printf("%lld\n", sum);
    return 0;
}



在我机器上的运行结果:
:!/home/starwing/Projects/misc/t
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 - 6780385526348313
19:121645100408832000 - 128425485935180313
20:2432902008176640000 - 2561327494111820313
2561327494111820313

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-24 08:24
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-09-24 08:59
andy198719
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-9-24
收藏
得分:0 
谢谢各位指点了,刚学c语言,以后还会有很多问题向大家请教的
2008-09-24 09:04
jinge1399
Rank: 1
来 自:新疆
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-9-12
收藏
得分:0 

心中有丘壑
2008-09-24 10:58
hxlou520
Rank: 1
来 自:中國_廈門
等 级:新手上路
帖 子:116
专家分:0
注 册:2008-8-29
收藏
得分:0 
广陵,StarWing83,果然強啊...我剛才運行了.我還以為广陵的沒有錯,但是看了你們然後的貼才發現錯了很多啊.....

應該多加練習和加強編程啊...  像你們兩個學習....

只要我用心,沒有不成功.
在學習中不斷失敗,必然是提高自己的一種手段.
2008-09-24 11:52
快速回复:求c程序:用循环嵌套的方法求阶乘的和!
数据加载中...
 
   



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

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