输入不超过1000的正整数n,输出n的阶乘的精确结果
样例输入:30
样例输出:265252859812191058636308480000000
分析:
为了保存结果,需要分析1000!有多大。用计算器算一算不难知道,1000!约等于4*10^2567,因此可以用一个3000个元素的数组f保存。为方便起见,让f【0】保存个位,f【1】保存十位等等,,,(方便向后进位);然后逆序除零输出即可
白书代码:
#include<stdio.h> #include<string.h> const int maxn = 3000; int f[maxn]; int main() { int i,j,n; scanf("%d",&n); memset(f,sizeof(f)); f[0]=1; for(i=2;i<=n;i++) { int c=0; for(j=0;j<maxn;j++) { int s=f[j]*i+c; f[j]=s%10; c=s/10; } } for(j=maxn-1;j>=0;j--) if(f[j]) break; for(i=j;i>=0;i--) printf("%d",f[i]); printf("\n"); return 0; }
自己代码:
#include <stdio.h> #include <string.h> #define max 3000 int a[max]; //author:YangSir int main() { int len,n,i,s,c; while(~scanf("%d",&n)) { memset(a,sizeof(a)); a[0]=1; len=1;//表示位数 for(i=2;i<=n;i++) { c=0;//表示进位的数值 for(j=0;j<len;j++) { s=a[j]*i+c; c=s/10; a[j]=s%10; } while(c) { a[j++]=c%10; c/=10; len++; } } for(i=len-1;i>=0;i--) printf("%d",a[i]); printf("\n"); } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。