1057 N的阶乘(51NOD基础题)

Posted 0一叶0知秋0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1057 N的阶乘(51NOD基础题)相关的知识,希望对你有一定的参考价值。

1057 N的阶乘技术分享(51NOD基础题)

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 
输入N求N的阶乘的准确值。
 
Input
输入N(1 <= N <= 10000)
Output
输出N的阶乘
Input示例
5
Output示例
120

思路:由于最终结果比较大正常的 LL 肯定是不行的 , 所以仿照 10 进制数 构造出 10000 进制数 , 对万进制数的操作仿照十进制
#include <cstdio>
#include <cstring>

#define maxn 10000*5+5

int a[maxn] = {0 , 1} ; //a[0] == 0 , a[1] == 1 , a[n] == 0 ;
int len  ; 
int n ; 

void solve(int num ){
    int up = 0 ; 
    for(int i=1 ; i<=len ; i++){
        up = a[i] * num + up ; //
        a[i] = up % 10000 ; //求出当前万进制的数字
        up = up / 10000 ; // 当前万进制数字进位
    }
    if(up != 0){//每次乘数结束后存在进位  才会增加万进制数的长度
        a[++len] = up ; 
    }
}

int main(){ 
    while(~scanf("%d" , &n)){
        len = 1 ; 
        for(int i=1 ; i<=n ; i++){
            solve(i) ; 
        }
        
        
        printf("%d" , a[len]) ; 
        for(int i=len - 1 ; i>0 ; i--){
            printf("%04d", a[i]) ; 
        }
        printf("\n") ; 
    }
    return 0 ; 
}

 



以上是关于1057 N的阶乘(51NOD基础题)的主要内容,如果未能解决你的问题,请参考以下文章

51 Nod 1057 N的阶乘Java大数乱搞

51nod1057 N的阶乘

51nod 1057 N的阶乘

51nod 1057 N的阶乘 (大数运算)

N的阶乘(10000) 51 nod——1057 (大数)

1058 N的阶乘的长度(51NOD基础题)