| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6897 人关注过本帖, 1 人收藏
标题:求10000的阶乘
只看楼主 加入收藏
lansong
Rank: 4
等 级:业余侠客
帖 子:79
专家分:226
注 册:2009-6-11
收藏
得分:0 

#include <iostream>
using namespace std;
const int N=9000;
inline void Muti(int r[],int n, int a)
{
    for(int i=1; i<=r[0]; i++)
    {
        r[i] *=a;
    }
    for(int i=1; i<r[0]; i++)
    {   
        r[i+1] += r[i]/10000;
        r[i] %=10000;
    }
    if(r[r[0]] >10000)
    {
        r[0]++;
        r[r[0]] = r[r[0]-1]/10000;
        r[r[0]-1] %=10000;
    }
}
inline void Display(int r[], int n)
{
    int i=r[0];
    printf("%d", r[i]);
    for(i--; i>0; i--)
    {
        printf("%04d", r[i]);
    }
    putchar('\n');
}
int main()
{
    int n;
    while(EOF != scanf("%d", &n) )
    {
        int result[N]={1,1};
        for(int i=1; i<=n; i++)
        {
            Muti(result,N, i);
        }
        Display(result, N);
    }
    return 0;
}
2010-05-26 01:20
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
应该不行,超出范围。难道要long long long long int ?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-05-26 07:47
ltyjyufo
Rank: 9Rank: 9Rank: 9
来 自:未来
等 级:蜘蛛侠
威 望:2
帖 子:353
专家分:1166
注 册:2009-10-25
收藏
得分:0 
  没事做啊,求这么大的阶乘

翱翔天空的雄鹰固然令人羡慕,却容易被禁锢于牢笼之中,只有那夜色中的蝙蝠才是真正自由的飞翔者....
2010-05-26 09:06
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
以下是引用BlueGuy在2010-5-25 18:20:59的发言:

smltq 挺沉的住气的 ,/

没实力,当然要沉住气。
2010-05-26 09:33
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
昨天看了上面的那种代码.感觉速度上快了些.就随手贴了出来,本意是想帮楼主解决问题的
今天看了下 lansong 贴了 ning写的大数阶,确实快好多,因为它每位保存的是小于1W的数.超过1W在考虑进位.随便我改了下昨天的代码:
程序代码:
[color=#0000FF]#include<iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int a[9000]={1}; 
    int n;
    int i,len=1,j;
    scanf("%d",&n);   
    for(i=2;i<=n;i++)
    {
        for(j=0;j<len;j++)
        {
            a[j]*=i;
        }

        for(j=0;j<len-1;j++)
        {
            a[j+1]+=a[j]/10000;
            a[j]%=10000;
        }

        if(a[len-1]>10000)
        {           
            a[len]=a[len-1]/10000;
            a[len-1]%=10000;
            len++;
        }           
    }

    for(i=len-1;i>=0;i--)
    {  
        printf("%04d",a[i]);
    }  
    system("Pause");
}
[/color]

[ 本帖最后由 smltq 于 2010-5-28 12:29 编辑 ]

简单的生活
2010-05-26 11:31
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 35楼 smltq
记得Devil_W 用 java的BigInteger类写过一个大数阶乘, 代码相当简短, 堪比rtgirl的那个 "四行代码求1000!"

我就是真命天子,顺我者生,逆我者死!
2010-05-26 11:41
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 34楼 Devil_W
经典,/

我就是真命天子,顺我者生,逆我者死!
2010-05-26 11:46
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
fy的四行求阶乘很经典
我这里免费帮有道做个宣传
http://www.
Devil_W不是要找人单挑代码吗?大家群P,你要能进决赛.我就承认我是傻子....
欢迎大家来报名.证明我们都不是傻子.... -,-
PS:不知道Devil_W能否复赛上见呢.

简单的生活
2010-05-26 11:48
NoSoul
Rank: 9Rank: 9Rank: 9
来 自:沈阳化工大学
等 级:蜘蛛侠
帖 子:283
专家分:1010
注 册:2009-6-6
收藏
得分:0 
一道水题 至于 跟这么长的帖吗

我想伸手拉近點,竟觸不到那邊,就欠一點點,但這一點點...卻好遠
2010-05-26 13:14
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


当时的截图。

哥自己的大数库。
2010-05-26 14:56
快速回复:求10000的阶乘
数据加载中...
 
   



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

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