杭电ACM?? 1042 N!大数阶乘

发布于:2021-10-01 19:44:39

数的阶乘,到13!整型变量就会溢出。而要算到1000!,甚至到10000!就要用字符串的来模拟乘法运算。




下面是代码:



#include
#include
int main()
{
int n, i, j, end;
int a[100000] = {0};
while(scanf("%d", &n) != EOF)
{
memset(a, 0, sizeof(a));
end = 0;
a[0] = 1;
for(i = 1; i <= n; i++)
{
//模拟乘法运算,每一位都乘以i
for(j = 0; j <= end; j++)
{
a[j] = a[j] * i;
}
//进位
for(j = 0; j <= end; j++)
{
if(a[j] > 10000 && j == end)
{
int c = a[j] / 10000 ;
a[j] = a[j] % 10000 ;
a[j+1] += c ;
end++ ;
}
else if(a[j] > 10000)
{
int c = a[j] / 10000 ;
a[j] = a[j] % 10000 ;
a[j+1] += c ;
}

}
}
printf("%d", a[end]);
for(i = end - 1; i >=0 ; i--)
{
printf("%04d",a[i]);
}
printf("
");
}
return 0;
}
采用四位一存的方法,效率比一位一存的快。


下面是结果:




模拟的乘法运算:


比如 11 * 12?




这是一位一存的,同理,四位一存就是大于100000就进位~~~


可以自行用笔演算一下,我可能讲的不是很清楚,请见谅!!~~

相关推荐

最新更新

猜你喜欢