首页 > 代码库 > hdu 1042 N!(大数阶乘,转化为100000这样的比较大的进制)
hdu 1042 N!(大数阶乘,转化为100000这样的比较大的进制)
N!
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 54172 Accepted Submission(s): 15365
Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1 2 3
Sample Output
1 2 6
Author
JGShining(极光炫影)
思路: 转化为像100000这样的比较大型的进制,然后就可以解决大数数位比较多的问题。 代码如下: #include<stdio.h> #include<string.h> int sum[20000];//用于存储大数的每一个数位,只不过因为进制是100000,不超过100000的还保留在sum[i]的以为上 int main() { int n,i,j; while(~scanf("%d",&n)) { memset(sum,0,sizeof(sum)); sum[0]=1;//0的阶乘是1,初始化为1 for(i=2;i<=n;i++) { for(j=0;j<20000;j++) { sum[j]*=i; } for(j=0;j<20000;j++) { sum[j+1]+=sum[j]/100000;//判断是否要进位 sum[j]%=100000; } } for(i=19999;i>=0&&!sum[i];i--);//消除前导0 printf("%d",sum[i--]); for(;i>=0;i--) { printf("%05d",sum[i]);//因为是100000进制的不足的时候,前面要补零 } printf("\n"); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。