题解 | N的阶乘
N的阶乘
https://www.nowcoder.com/practice/f54d8e6de61e4efb8cce3eebfd0e0daa
使用10000进制,即可只用算1位的乘法并进位。最后除最高位都用%04d格式输出即可。
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
void mul(vector<int>& digs, int m) {
int car = 0;
for (auto& dig : digs) {
int res = dig * m + car;
car = res / 10000;
dig = res % 10000;
}
if (car) digs.push_back(car);
}
int main() {
int a;
while (cin >> a) { // 注意 while 处理多个 case
vector<int> digs {1};
for (int i = 2; i <= a; i++) mul(digs, i);
reverse(digs.begin(), digs.end());
printf("%d", digs[0]);
for (auto i = digs.begin() + 1; i < digs.end(); i++) printf("%04d", *i);
printf("\n");
}
}