- /*
- 习题 92:高精度算阶乘★★
- 题目描述:
- 算出n!的完整结果,其中n!=1*2*3*...*n
- 输入:
- 多组测试数据,一行一组,每行仅一个数n
- 其中0<=n<=10000
- 输出:
- 输出相应的n!的结果,必须精确到个位
- 样例输入:
- 10
- 20
- 100
- 样例输出:
- 3628800
- 2432902008176640000
- 933262154439441526816992388562667004907159682643816214685929
- 638952175999932299156089414639761565182862536979208272237582
- 51185210916864000000000000000000000000
- 其它信息:
- 最后一个100!的结果由于过长,故拆分成三行,每行60字符,请见谅
- 难度:Easy
- */
- #define MAX 10000
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- int n;
- int i,j,k;
- char result[MAX];
- char tmp[MAX];
- while(scanf("%d",&n)!=EOF){
- if(n==0){
- printf("1/n");
- continue;
- }
- memset(result,'0',MAX);
- memset(tmp,'0',MAX);
- tmp[0]='1';
- for(i=1;i<=n;i++){
- memset(result,'0',MAX);
- for(j=0;j<i;j++){
- for(k=0;k<MAX;k++){
- result[k]=result[k]+(tmp[k]-48);
- if(result[k]>57){
- result[k+1]=result[k+1]+(result[k]-48)/10;
- result[k]=result[k]-(result[k]-48)/10*10;
- }
- }
- }
- memcpy(tmp,result,MAX);
- }
- for(i=MAX-1;i>=0;i--)
- if(result[i]!='0')break;
- for(;i>=0;i--)printf("%c",result[i]);
- printf("/n");
- }
- }
高精度算阶乘
最新推荐文章于 2022-11-13 16:35:45 发布