#include <iostream> using namespace std; const int maxn = 1005; int ans[maxn] = {1}, n, res[maxn]; void Multi(int k){ int cur = 0; for(int i = 0;i < maxn;++i){ cur = ans[i] * k + cur / 10; ans[i] = cur % 10; } } void add(){ int cur = 0; for(int i = 0;i < maxn;++i){ cur = res[i] + ans[i] + cur / 10; res[i] = cur % 10; } } int main(){ cin >> n; for(int i = 1;i <= n;++i){ Multi(i); add(); } int j = maxn; while(!res[j] && j > 0) j--; for(int i = j;i >= 0;--i) cout << res[i]; return 0; }
重点要掌握:高精度加法、减法、乘法就可以了!
因为:除法:实际上就是减法,减多少次就会减成负数,这个次数-1就是除法的商。然后这个负数加上减数,就是余数,所以高精度取余数实际上也是高精度减法!然后高精度阶乘,实际上就是高精度数字乘以非高精度数,这道水题奉上,希望可以作为大家高精度的模板代码,因为我觉得我这个代码还算是比较简洁。嘻嘻~