程序是为了计算比较大的数的阶乘,算法是我自己写的,也不知道有没有问题。编译的时候问题出在最后打印时用的那个for循环。各位仁兄指点一下。
/*
计算N的阶乘,首先用(N-1)! 的各个位上的数去乘N。
再从高位开始判断每一位是否大于10;
若大于10,则向比它高一位的元素进位;
*/
/*
具体算法:
1:令a[1]为最低位,且a[1]=1;
2:用N去乘它
3:判断a[i]是否大于10;
4:向高一位进位;
5:极端情况,即高一位原为9,则进位会继续产生大于10的数。
为此必须循环判断;
6:最后在打印的时候必须从高位开始进行;
7:由于结果的不可预见性,所以必须有另一计数器
作用是记录一共产生了多少位。
*/
#define N 80
void main(){
int a[N]; /* 保存结果 */
int index; /* 计数器变量 初始值为1 */
int i,j,k,d; /* 循环变量 */
int m=50; /* 求m!; */
a[1]=1;
index=1;
for(i=1;i
for(j=1;j
a[i]=a[i]*m;
for(j=1;j
for(k=index-j;k>0;k--)
if(a[k]>10){
a[k+1]+=a[k]/10;
a[k]%=10;
}
}
}
/* 以下的if判断为最高位的情况 */
if(a[index]>9){
a[index+1]=a[index+1]+a[index]/10;
a[index]=a[index]%10;
index++;
}
}
for(d=index;d>0;--d)
printf(“%d\n“,a[d]);
}
人打赏
0人 点赞
主帖获得的天涯分:0
举报 |
楼主
|
楼主发言:1次 发图:0张 | 添加到话题 |