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;
}
http://blog.163.com/kevinlee_2010/
浙公网安备 33010602011771号