代码解析:
multiply 函数实现高精度乘法。它接受一个存储数字的向量 num 和一个因子 factor 作为参数,并返回乘法结果的向量 result。
在 multiply 函数中,使用 carry 变量来保存进位。
在 for 循环中,逐位进行乘法运算,并将结果加入 result 向量中。同时更新进位 carry。
在 while 循环中,将剩余的进位加入 result 向量。
最后返回 result 向量,即乘法运算的结果。
factorial 函数计算阶乘。它接受一个整数 n 作为参数,并返回结果的向量 result。
初始时,将1添加到 result 向量中。
使用 for 循环,从2开始依次乘以2到 n 之间的整数,并将结果更新到 result 向量中。
最后返回 result 向量,即阶乘的结果。
printNumber 函数用于输出高精度整数。它接受一个存储数字的向量 num 作为参数。
从 num 的末尾开始遍历,输出每个数字。
最后输出换行符。
在 main 函数中,首先读入一个整数 n。
调用 factorial 函数计算 n 的阶乘,将结果保存在 result 向量中。
调用 printNumber 函数输出结果向量 result。
参考代码:
#include <iostream>
#include <vector>
using namespace std;
// 高精度乘法
vector<int> multiply(vector<int>& num, int factor) {
vector<int> result;
int carry = 0;
for (int i = 0; i < num.size(); i++) {
int temp = num[i] * factor + carry;
result.push_back(temp % 10);
carry = temp / 10;
}
while (carry > 0) {
result.push_back(carry % 10);
carry /= 10;
}
return result;
}
// 计算阶乘 n!
vector<int> factorial(int n) {
vector<int> result;
result.push_back(1);
for (int i = 2; i <= n; i++) {
result = multiply(result, i);
}
return result;
}
// 输出高精度整数
void printNumber(std::vector<int>& num) {
for (int i = num.size() - 1; i >= 0; i--) {
cout << num[i];
}
cout << endl;
}
int main() {
int n;
cin >> n;
vector<int> result = factorial(n);
printNumber(result);
return 0;
}
0.0分
2 人评分