题目描述编写一个程序计算1977!的值提示1977!的值超过计算机所能表示的整数范围请考虑其他技巧假设 1977!之值不超过10000位用一个含有10000个元素的整型数组num表示其结果每个元素存放一位num0存入个位数num存入十 位数依次类推……8!=40320当前最高位len=4求9!与各位依次相乘rum保存当前的进位数字。0=rem91rem置初始值02i=0rem=rem+num09=
#include <iostream>
using namespace std;
const int MAX_LEN = 10000; // 数组的最大长度
int main() {
int num[MAX_LEN] = {0}; // 初始化数组为全0
num[0] = 1; // 初始值为1
int len = 1; // 数组的有效长度
int rem = 0; // 进位数字的初始值
// 计算阶乘
for (int i = 2; i <= 1977; i++) {
for (int j = 0; j < len; j++) {
int temp = num[j] * i + rem; // 当前位的乘积加上进位
num[j] = temp % 10; // 当前位的结果
rem = temp / 10; // 计算进位
}
while (rem > 0) { // 处理进位
num[len] = rem % 10; // 进位数字的个位数
rem = rem / 10; // 更新进位数字
len++; // 更新数组的有效长度
}
}
// 输出结果
for (int i = len - 1; i >= 0; i--) {
cout << num[i];
}
cout << endl;
return 0;
}
题目解析 本题可以使用一个整型数组num来表示1977!的结果,数组的每个元素存放一位数字。初始时,数组num的第一个元素为1,其余元素为0。然后,从2到1977,依次将每个数字与数组num相乘,并更新数组num的值。计算过程中,需要处理进位的情况。最后,将数组num的结果逆序输出即可得到1977!的值。
算法步骤
- 初始化数组num为全0,数组num的第一个元素为1,len为1,rem为0。
- 从2到1977,执行以下步骤:
- 将当前数字与数组num相乘,并加上进位rem。
- 更新数组num的值和进位rem的值。
- 如果进位rem大于0,则将进位的个位数存放在数组num的下一个位置,并更新len的值。
- 将数组num的结果逆序输出。
原文地址: http://www.cveoy.top/t/topic/i3B7 著作权归作者所有。请勿转载和采集!