求100以下的階乘值,值非常非常大,所以相當於無窮大數相乘了。
這次用string和整數相乘的方法實現一下,其實和string和string相乘的方法差不多,不過簡化了點。
#include#include #include #include using namespace std; string sMulFact(string &s, unsigned n) { string ans; unsigned carry = 0; for (int i = (int)s.size() - 1; i >= 0 || carry; i--) { int a = i >= 0 ? s[i] - '0' : 0; unsigned t = a * n + carry; ans.push_back(t % 10 + '0'); carry = t / 10; } reverse(ans.begin(), ans.end()); return ans; } string sFact(unsigned n) { string s = 1; for (unsigned i = 2; i <= n; i++) { s = sMulFact(s, i); } return s; } int smallFactorial() { unsigned T, n = 0; scanf(%u, &T); while (T--) { scanf(%u, &n); cout<