| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1486 人关注过本帖
标题:求1000阶乘
只看楼主 加入收藏
二0一一628
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2011-7-2
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:17 
求1000阶乘
用C编写的各种方法越多越好!精益求精!谢谢

[ 本帖最后由 二0一一628 于 2011-7-14 10:48 编辑 ]
2011-07-14 10:19
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
收藏
得分:1 

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2011-07-14 11:53
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:1 
程序代码:
#include <vector>
typedef unsigned long uint32_t;
typedef unsigned long long uint64_t;

struct foo
{
    foo( uint32_t val )
    {
        val_.push_back( val );
    }
    foo& operator*=( uint32_t val )
    {
        uint64_t tmp = 0;
        for( std::vector<uint32_t>::iterator itor=val_.begin(); itor!=val_.end(); ++itor )
        {
            tmp += *itor * (uint64_t)val;
            *itor = tmp%1000000000;
            tmp /= 1000000000;
        }
        if( tmp != 0 )
            val_.push_back( (uint32_t)tmp );
        return *this;
    }
    friend std::ostream& operator<<( std::ostream& os, const foo& f );
private:
    std::vector<uint32_t> val_;
};

#include <iostream>
#include <iomanip>
std::ostream& operator<<( std::ostream& os, const foo& f )
{
    os << f.val_.back();
    char fillchar = os.fill( '0' );
    for( std::vector<uint32_t>::const_reverse_iterator itor=f.val_.rbegin()+1; itor!=f.val_.rend(); ++itor )
        os << std::setw(9) << *itor;
    os.fill( fillchar );
    return os;
}

foo fact( uint32_t n )
{
    foo r = 1;
    for( uint32_t i=1; i<=n; ++i )
        r *= i;
    return r;
}

int main( void )
{
    using namespace std;

    cout << fact(1000) << endl;

    return 0;
}
2011-07-14 12:52
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:1 
大啊!

   唯实惟新 至诚致志
2011-07-14 13:02
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:1 
太大了,大整数乘法比较麻烦。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-07-14 15:09
二0一一628
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2011-7-2
收藏
得分:0 
除了3楼的还有没有更好的答案?
2011-07-14 16:14
二0一一628
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2011-7-2
收藏
得分:0 
回复 3楼 rjsp
VS2010测试了下,运行出错。
2011-07-14 16:18
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:1 
为啥搞这么大?
2011-07-14 17:08
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:1 
#include <stdio.h>
int main(void)
{
    int a[1000]={0};
    int x=0,j=0;
    int i;
    int n;
    scanf("%d",&n);
    i=n;
    a[0]=1;
    while(n>0)
    {
        for(x=0;x<1000;x++)
        {
            a[x]*=i;
            a[x]+=j;
            j=a[x]/10;
            a[x]%=10;
        }
        i--;
        n--;
    }
    for(j=99;j>=0;j--)
        if(a[j]!=0)
            break;
    for(j=j;j>=0;j--)
        printf("%d",a[j]);
    printf("\n");
    return 0;
}
2011-07-14 21:56
二0一一628
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2011-7-2
收藏
得分:0 
回复 9楼 obstratiker
计算结果不对啊
2011-07-14 22:04
快速回复:求1000阶乘
数据加载中...
 
   



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

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