| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6202 人关注过本帖
标题:计算1!+2!......+100!的值的程序怎么编写
只看楼主 加入收藏
Devon_Ye
Rank: 4
来 自:广东
等 级:业余侠客
帖 子:124
专家分:282
注 册:2010-1-7
收藏
得分:0 
回复 28楼 playmyself
能不能把你求阶乘和的算法解释下。
为什么对L5求余,不能理解,先谢了
2010-02-02 17:19
zhangbohtz
Rank: 2
等 级:论坛游民
帖 子:36
专家分:39
注 册:2010-1-29
收藏
得分:0 
1!+2!+...+100!=-65945838324266026493179649505281627446035484900500056790873129230417082495037337004995891065069579006673525905642439403083159438360576.00
#include<stdio.h>
void main()
{
    long double i,f,sum;
    f=1;
    sum=0;
    for(i=1;i<=100;i++)
    {
        f*=i;
        sum+=f;
    }
    printf("1!+2!+...+100!=%.2f\n",sum);
}
gcc下好像有些问题,不过编译通过了,顶上是运行结果,怎末是负值?
2010-02-02 20:43
lele2010
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:84
专家分:121
注 册:2010-1-23
收藏
得分:0 
#include<stdio.h>
long f(float x)
{
    float s=1,i;
    for(i=1;i<=x;i++)
    {
        s*=i;
    }
    return s;
}
void main()
{
    long t=0,x;
    for(x=1;x<=100;x++)
    {
        t=t+f(x);
    }
    printf("%ld\n",t);
}

这是我编写的程序!这个程序是正确的!欢迎大家提出宝贵的意见!谢谢!

[ 本帖最后由 lele2010 于 2010-2-2 21:26 编辑 ]
收到的鲜花
  • Devil_W2010-02-02 21:49 送鲜花  -2朵   附言:你着代码,只能给自己看而已。

喜欢结交更多C语言学习者,QQ:1093027367
2010-02-02 21:24
徐笑人生
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-2-2
收藏
得分:0 
回复 43楼 lele2010
怎么可能对啊,1!+2!-----100!会那么少吗
2010-02-02 21:52
Devon_Ye
Rank: 4
来 自:广东
等 级:业余侠客
帖 子:124
专家分:282
注 册:2010-1-7
收藏
得分:0 
回复 43楼 lele2010
前面的回复你都有认真看了吗
还来这类程序啊
你有验证你的程序吗?
2010-02-02 21:52
playmyself
Rank: 5Rank: 5
来 自:第3系4级宇宙空间
等 级:职业侠客
帖 子:76
专家分:399
注 册:2009-7-8
收藏
得分:0 
回复 41楼 Devon_Ye
对L5求余就是要截取后5位,对L5整除就是要前5位,int在10进制里最大数是10位。
/*高精度阶乘和注释版 2010-02-01 */

#define L5 100000  //每个结果所占的位数,因为int是10位,所以我取一半5位,如果算到1000位阶乘5*4=9这样两个数相乘不会超界。
#define N 1001     //要算的位数+1
#include<stdio.h>

static num[N][L5];        //这里L5还得有点大了,其实用不上
void BigFac(int n);        //算n!放到num[n][1]里

int main(void)
{
    int tp, n, bt, ap;
   
    scanf("%d", &n);
   
    for(tp = n; tp > 0; tp--)    //算n!
    BigFac(tp);

    for(ap = 2; ap <= n; ap++)        //把结果分别加上,把i-1加到i上,i从2直加到n
    {
        for(bt = 1; bt-1 <= *num[ap-1]; bt++) //大整数加法
        {
            num[ap][bt] += num[ap-1][bt];                    
            tp = num[ap][bt] / L5;        //作加法还是可能大于5位于是再截取,和乘法一样
            num[ap][bt] %= L5;
            num[ap][bt+1] += tp;
        }
    }

    printf("%d", num[n][(*num[n])--]);    //先输出第一个因为第一个有可能0开头
    for(;*num[n]>0;--*num[n])            //用num[n][0]分别输出数据
        printf("%05d",num[n][*num[n]]);
    printf("\n");
    return 0;
}

void BigFac(int n)        //用于算n!的
{
    long tpnum;
    int i, j, add = 0;
   
    num[n][0] = num[n][1] = 1;        //num[n][0]存放有多少个5位的存放数据
    for(i = 2; i <= n; i++)            //num[n][1]以后都是存放结果
    {
        for(j = 1; j <= *num[n]; j++)
        {
            tpnum  = num[n][j]*i + add;
            num[n][j] = tpnum % L5;    //对L5求余的目的是截取后5位
            add    = tpnum / L5;    //整除的目的就是要前5位,add存放进位
        }
        while(add)                    //有进位就加上
        {
            num[n][++(*num[n])] = add % L5;
            add /= L5;
        }
    }
}

无聊创造奇迹。
2010-02-02 21:58
快速回复:计算1!+2!......+100!的值的程序怎么编写
数据加载中...
 
   



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

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