hdu 1042 N!(大数阶乘,转化为100000这样的比较大的进制)
发布时间:2020-12-14 03:04:14 所属栏目:大数据 来源:网络整理
导读: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! ? Inpu
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
?
Sample Output
?
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,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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |