题目来源
地址:https://pintia.cn/problem-sets/14/exam/problems/742
错误信息
思路地址:https://blog.csdn.net/DeskOneRice/article/details/128632266?spm=1001.2014.3001.5501
代码内容
void Print_Factorial(const int N)
{
if (N < 0)
printf("Invalid input");
else if (N == 0)
printf("1");
else
{
int sum[100000]; //数组要足够大
int weishu = 0;
for (int n = N, i = 0; n != 0; n /= 10, i++)
sum[i] = n % 10, weishu++; //将N存入数组sum,作为和的初始值
for (int n = N - 1; n != 1; n--)
{
int temp, up = 0;
int weishu_temp = 0;
for (int i = 0; i < weishu; i++) //sum是几位数就乘几次
{
temp = sum[i] * n + up;
sum[i] = temp % 10, weishu_temp++;
up = temp / 10;
if (up != 0 && i == weishu - 1) //最高位乘完还需要进位,另外考虑
{
for (int j = 1; up != 0; up /= 10, j++)
sum[i + j] = up % 10, weishu_temp++;
}
if (i == weishu - 1) //退出循环前,更新和的位数
{
weishu = weishu_temp;
break;
}
}
}
for (int i = weishu - 1; i >= 0; i--) //将和的各数字倒序输出
printf("%d", sum[i]);
}
return;
}
问题:算的是18的阶乘,此处调试点是从18算到*14,仅仅少了一个j++,就出现了这种情况。数字没有超出整型范围,为什么前面出现了一串不明数字,还是负的?按理来说,在少了j++的情况下应该是 128160,求解答,非常感谢!