您的位置:首页 > 其它

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

2017-09-19 18:51 169 查看
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
== 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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: