大数阶乘(C/C++)

高精度的运算在Java中是很容易实现的,就像 a + b Problem 一样,因为Java提供了相应的类库和API;但是在 C/C++ 当中就没有那么现成的类和API来让你调用了。本着“自己动手,丰衣足食”的Coder精神,还是自己上吧。让我们一起看看如何使用 C/C++ 来进行大数的阶乘吧。

/*
 *From:《算法竞赛入门经典》――刘汝佳
 *Author:YQ_beyond
 *Date:2015.03.29
*/

/*
  C++当中高精度运算
*/

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

const int maxn = 3000;
int res[maxn];

int main()
{
    int i, j, n;
    while(1)
    {

        scanf("%d",&n);
        memset(res,0,sizeof(res));
        res[0] = 1;

        int cut = 1;
        for(i = 1 ; i <= n ; i++)
        {
            int cnt = 0;
            for(j = 0;j < cut; j++)
            {
                int s = res[j] * i + cnt;
                res[j] = s % 10;
                cnt = s / 10;
            }
            for(; cnt != 0; j++)
            {
                int s = res[j] * i + cnt;
                res[j] = s % 10;
                cnt = s / 10;
                cut ++;
            }
        }

        //for(j = maxn - 1; j >= 0; j--) if(res[j]) break;
        for(i = cut - 1; i >= 0; i--) printf("%d",res[i]);
        printf("\n");
    }
    return 0;
}

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。