云淡风轻
Stay foolish,stay hungry.
1,给定一个正数n(n>0),求n!,n可能会很大,但n不会超过2,000,相应的阶乘的结果不会超过8000位(这里我只是估计了一下)十进制数,输入:3  输出:6
分析:因为n不会超过2,000,所以n可以用一个int类型来表示,这个题目的难点是如何去表示阶乘的结果。我们可以考虑用数组a[0],a[1],a[2]...来表示最终结果的个位,十位,百位....a的大小可以用一个常数数组a[8000]来表示,核心是我们如何模拟阶乘运算的过程,细节就是如何处理进位,代码如下:
//输入为N<2000,打印N!
void factor(int N){
int *a=new int[8000]();
a[0]=1;
for(int k=2;k<=N;k++){
int c=0;
for(int i=0;i<8000;i++){
int t=a[i]*k+c;
a[i]=t % 10;
c=t/10;
}
}
//打印输出
int i;
for(i=7999;i>=0;i--){
if(a[i])  //高位的0不打印
break;
}
for(int j=i;j>=0;j--){
printf("%d",a[j]);
}
delete [] a;
}
posted on 2011-12-22 23:03  kevin Lee  阅读(203)  评论(0)    收藏  举报