BigNum
题意:要求计算N的阶乘 范围为10000
大数乘小数 利用数组存储大数的每一位,从小到大为 个 十 百 千 万 。。。。 然后利用小数与每一位相乘,然后在计算是否进位。
for( j=2; j<=n; j++) { // sum 表示大数有几位 jin 表示进位
for(jin = 0, i=1;i<=sum;i++){
temp = a[i-1]*j+jin; // 计算每一位相乘的结果
a[i-1] = temp%10; // 得到后放入相应位置前检查是否进位
jin = temp/10;
}
while(jin){ // 最大位上仍需进位
a[++sum-1]=jin%10;
jin/=10;
}
}
已AC
#include<stdio.h>
#include<string.h>
int a[500010];
void Fac(int n) {
memset(a,0,sizeof(a));
int m = 1;
int sum=1;
int jin=0;
int temp=1;
int i,j;
a[0]=1;
for( j=2; j<=n; j++) {
for(jin = 0, i=1;i<=sum;i++){
temp = a[i-1]*j+jin;
a[i-1] = temp%10;
jin = temp/10;
}
while(jin){
a[++sum-1]=jin%10;
jin/=10;
}
}
for(i=sum-1;i>=0;i--){
printf("%d",a[i]);
}
printf("\n");
}
int main() {
int x;
while(~scanf("%d",&x)) {
Fac(x);
}
return 0;
}