ACM大数阶乘问题

来源:互联网 发布:三星s7检查网络连接 编辑:程序博客网 时间:2024/05/21 12:44

解题思路:

看着题目首先想到用数组来保存数据,肯定不能用任何数据类型来保存。

想到:5!=5*4!=5*4+20*5.。。

大数阶乘

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000
代码如下:
#include<stdio.h>#include<string.h>//算法思路,求模和求余,最后看进位//5!=120,在数组中存储为a[3]={0,2,1}int main(){int N=0,k=0,temp=0,i=0,j=0;int buf[40000];//设置一个很大的数保证有足够空间存储buf[0];int jinwei=0;int weishu;memset(buf,0,sizeof(buf));scanf("%d",&N);if(N>=2){buf[0]=1;weishu=1;for(i=2;i<=N;i++)//从第二个数开始{for(j=1,jinwei=0;j<=weishu;j++){ temp=buf[j-1]*i+jinwei; buf[j-1]=temp%10; jinwei=temp/10;}while(jinwei){  buf[++weishu-1]=jinwei%10;  jinwei/=10;}}}printf("总共为%d位数,%d!=\n",weishu,N);for(i=weishu;i>=1;i--){printf("%d",buf[i-1]);}return 0;} 

0 0