阶乘进阶版
分析:由于N最大为1000,
int的范围最大为10的9次方,
long long int的范围最大为10的18次方,
使用斯特林公式计算可知,n为12时,结果的位数已经为9,
故N取1000一定远远超过了long long Int的范围,
故应该考虑用模拟乘法的方法计算。
//阶乘计算升级版
//大数乘法
/*
最外层是算阶乘
第二层for循环模拟乘法
temp算当前位的乘法
arr[j] 填上当前位乘法的最后一位
然后赋值n为 进位的数
最后for循环结束出来
进位的n还有没有填完的
进while循环
在往后面填数
k++
把 for循环结束的arr 输出一下看看就知道了
*/
void Print_Factorial(const int N)
{
int temp = 0, k = 1, n = 0;
int arr[3000] = { 0 };
if (N < 0)
{
printf("Invalid input");
}
else
{
arr[0] = 1;
for (int i = 2; i <= N; i++)
{
for (int j = 0; j < k; j++)
{
temp = arr[j] * i + n;
arr[j] = temp % 10;
n = temp / 10;
}
while (n)
{
arr[k++] = n % 10;
n /= 10;
}
}
for (int i = k - 1; i >= 0; i--)
{
printf("%d", arr[i]);
}
}
}
#include <stdio.h>
void Print_Factorial(const int N);
int main()
{
int N;
scanf_s("%d", &N);
Print_Factorial(N);
return 0;
}
/* 你的代码将被嵌在这里 */