| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2631 人关注过本帖
标题:求n的阶乘,n可以无限大,该怎样解决这个问题???
只看楼主 加入收藏
water95
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2015-4-10
结帖率:40%
收藏
已结贴  问题点数:10 回复次数:10 
求n的阶乘,n可以无限大,该怎样解决这个问题???
求n的阶乘,n可以无限大,该怎样解决这个问题???




希望可以给个思路或者代码,很感激!!!

[ 本帖最后由 water95 于 2015-6-23 09:18 编辑 ]
2015-06-23 09:16
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
自己重写大数乘法  或者使用大数库

DO IT YOURSELF !
2015-06-23 09:53
T_MACC
Rank: 4
等 级:业余侠客
威 望:8
帖 子:99
专家分:211
注 册:2015-4-14
收藏
得分:2 
这不是胡扯吗  还无限大
2015-06-23 14:43
water95
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 3楼 T_MACC
不是无限大,n可能很大
2015-06-23 20:07
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:2 
以下是引用T_MACC在2015-6-23 14:43:27的发言:

这不是胡扯吗  还无限大
上限受限于存储设备
2015-06-24 16:56
happy两棵树
Rank: 2
等 级:论坛游民
帖 子:28
专家分:62
注 册:2013-7-18
收藏
得分:2 
程序代码:
#include <iostream>
#include <iomanip> 
using namespace std;
int factorial(int n);
int factorial1(int n);
int main()
{
    
    cout << setfill('0')<< setw(4) << 0 << endl;
    printf("%4.4ld",0);
    int i;
    for(i = 20; i <21; i++)
    {
        std::cout << i << "   ";
        factorial(i);
        std::cout << "    ";
        factorial1(i);
        std::cout<< std::endl;
    }

    
    return 0;
} 


int factorial(int n)
{
    const int baseNum = 10000;
    if( n < 0 )
        return n;
    if( n <= 1 )
        return 1;
    
    long a[100];
    int num_a = 0;
    int carry = 0; // 进位
    int i, j;
    a[0] = 1;
    for(i = 1; i <= n; i++)
    {
        carry = 0;
        for(j = 0; j <= num_a; j++)
        {
            a[j] = a[j] * i + carry;
            carry = a[j] / baseNum;
            a[j] %= baseNum;
        }
        if(carry > 0)
        {
            num_a++;
            a[num_a] = carry; // 进位存入数组下一个单元中 
        }
    }
    for(i = num_a; i >=0; i--)
    std::cout  << setw(4) << a[i];        
    return 1;    
}
int factorial1(int n)
{ 
    long a[10000]; 
    int i,j,c,m=0; 
    a[0]=1; 
    for(i=1;i<=n;i++)
    { 
        c=0; 
        for(j=0;j<=m;j++)
        {
            a[j]=a[j]*i+c;
            c=a[j]/10000;
            a[j]=a[j]%10000;
        }
//        printf("\n");
        if(c>0) 
        {
            m++;
            a[m]=c;
        }
    }
    printf("%ld",a[m]);
    for(i=m-1;i>=0;i--)
        printf("%4.4ld",a[i]);
//    return w;
}


[ 本帖最后由 happy两棵树 于 2015-6-25 15:13 编辑 ]
2015-06-25 15:11
w2009w
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:190
专家分:542
注 册:2015-4-20
收藏
得分:2 
上面这个解答也太复杂了吧!
#include<iostream>
using namespace std;

double fun(int n)
{
    double f;
    if(n==0)
        f=1;
    else
        f=n*fun(n-1);
    return f;
};

int main()
{
    int n;
    cout<<"请输入求阶乘的数n:"<<endl;
    cin>>n;
    cout<<"n!="<<fun(n)<<endl;
    return 0;
}
2015-06-25 15:21
happy两棵树
Rank: 2
等 级:论坛游民
帖 子:28
专家分:62
注 册:2013-7-18
收藏
得分:0 
回复 7楼 w2009w
n可以无限大,11111111111111111111111111111111111111111111111111111111111111111111111 给你个这么大的数,你怎么做出它的阶乘。
我的方法就可以
2015-06-27 22:46
yajuie
Rank: 2
等 级:论坛游民
帖 子:10
专家分:15
注 册:2015-6-21
收藏
得分:2 
听老师提过,有一种很偏门的变量定义。int64;据说他有64个字节。不过我没试过。如果他说是真的话我想你应该够用了。
2015-06-28 05:27
yajuie
Rank: 2
等 级:论坛游民
帖 子:10
专家分:15
注 册:2015-6-21
收藏
得分:0 
刚刚百度查了一下。还真有,看样子都不用那么麻烦
VCVC6.0的64位整数分别叫做__int64与unsigned __int64,其范围分别是[-2^63, 2^63)与[0,2^64),即-9223372036854775808~9223372036854775807(10^19)与0~18446744073709551615(约1800亿亿)(10^20)。
2015-06-28 05:37
快速回复:求n的阶乘,n可以无限大,该怎样解决这个问题???
数据加载中...
 
   



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

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