高精度乘法

#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;
}