问题分析:
这段代码的问题在于数组array的大小为MAX,而且MAX的值被设定为40000。然而,计算100的阶乘结果的数值会非常大,远远超过了数组array的容量。因此,数组array无法存储完整的阶乘结果。
解决方案:
为了计算大整数的阶乘,可以借助字符串来表示和计算。以下是修改后的代码:#include <stdio.h>#include <string.h>#define MAX 20000void multiply(char *num, int digit){ int carry = 0; int len = strlen(num); for (int i = 0; i < len; i++) { int product = (num[i] - '0') * digit + carry; num[i] = product % 10 + '0'; carry = product / 10; } while (carry > 0) { num[len] = carry % 10 + '0'; carry /= 10; len++; }}void factorial(int n){ char num[MAX]; memset(num, '0', sizeof(num)); num[0] = '1'; for (int i = 2; i <= n; i++) { multiply(num, i); } int len = strlen(num); for (int i = len - 1; i >= 0; i--) { printf("%c", num[i]); }}int main(void){ int n; scanf("%d", &n); factorial(n); return 0;}
这段代码使用字符串num来表示大整数,并且进行乘法运算。在每次乘法运算后,需要将结果保存在num中,并且处理进位。最后,按照逆序打印出阶乘结果。
请尝试运行修改后的代码,并检查输出结果是否正确。如果还有其他问题,请随时提问。
球一个最佳答案谢谢啦!这对我非常重要! |