第一次的大数模拟
6-3 阶乘计算升级版 (20 分)
大数模拟
说明:求阶乘的函数
题目:
过程:数字在15!时就把long double爆了,思考后用数组模拟大数储存,代码如下
代码:
void Print_Factorial(const int N)
{
int sz[3000] = { 0 };
if (N < 0)printf("Invalid input\n");
else if (N == 0)printf("1\n");
else
{
sz[0] = 1;
int weishu = 1, jiecheng = 1, zc = 0, i = 0;
while (jiecheng <= N)
{
while (sz[0] >= 10)//将0中多的数分到后面空间存放
{
for (i = 0; i < weishu; i++)
{
if (weishu - i == 1) break;
sz[weishu - i] = sz[weishu - i - 1];
}
sz[1] = sz[0] % 10;
sz[0] /= 10;
weishu++;
}
for (i = 0; i < weishu; i++)//各位数乘上阶乘数
{
sz[i] *= jiecheng;
}
for (i = weishu - 1; i > 0; i--)//将多的数逐渐移至sz[0]中并在下次循环开始后移
{
sz[i - 1] += sz[i] / 10;
sz[i] = sz[i] % 10;
}
jiecheng++;
}
for (i = 0; i < weishu; i++)
{
printf("%d", sz[i]);
}
}
}
总结:如上,模拟很成功,经百度一千阶乘为10的2567次方,这里设了3000数组,成功运行;