高位阶乘计算

输入不超过1000的正整数n,输出n!=1x2x3......xn的精确结果

输入:30

输出:265252859812191058636308480000000


分析:

1.平常用迭代计算阶乘,不能计算高位阶乘,因为会超过int值的范围,long long也不能满足;

2.因此要手动模拟计算,依次模拟计算1x2,1x2x3......1x2x3...n

3.用一个高维数组fact[MAX]存储阶乘值,且低位依次存储,即:fact[0]存储个位,fact[1]存储十位......这样可以方便进位处理;

4.进位处理过程:假设fact存储值依次为:fact[0], fact[1], fact[2]...fact[k](fact[0]为个位,fact[1]为十位....),此时乘数是i,即乘以i; 从fact[0]到fact[k]依次处理:

   假设buf=fact[j]*i+ans(其中ans为前一位的进位,初始为0),则当前fact[j]=buf%10;向高位进位为ans=buf/10。


#include
#include
#define MAX 5000
using namespace std;

int fact[MAX];
int main()
{
    int n;
    while(cin>>n)
    {
        memset(fact,0,sizeof(fact));
        fact[0]=1;
        int ans=0;
        for(int i=2;i<=n;i++){
            for(int j=0;j=0;pos--) if(fact[pos]) break;
        for(int i=pos;i>=0;i--) cout<



你可能感兴趣的:(阶乘)