题解 | #N的阶乘#
N的阶乘
http://www.nowcoder.com/practice/f54d8e6de61e4efb8cce3eebfd0e0daa
高精度乘法
#include <iostream>
#include <vector>
using namespace std;
// A 高精度整数, b 低精度 123456 * 11 -> 6 * 11 = 66
vector<int> mul(vector<int> &A, int b)
{
vector<int> C;
int t = 0; // t是进位
for (int i = 0; i < A.size() || t != 0; i++)
{
if (i < A.size())
t += A[i] * b; // i 没有枚举完
C.push_back(t % 10);
t /= 10; // 更新进位
}
return C;
}
int main()
{
int a;
while(cin >> a)
{
vector<int> A;
string s = to_string(a);
for (int i = s.size() - 1; i >= 0; i--)
A.push_back(s[i] - '0');
for(int i = 1; i <= a - 1; i ++)
{
A = mul(A, i);
}
for (int i = A.size() - 1; i >= 0; i--)
printf("%d", A[i]);
printf("\n");
}
return 0;
}