#include<iostream>
#include<string>
#include<vector>
using namespace std;
string IntToStr(int x){
string str;
int t;
while (x){
t = x % 10;
str += t + '0';
x /= 10;
}
return str;
}
vector<string> Mul(string str1, string str2){
int len1 = str1.size();
int len2 = str2.size();
int t, num, r,sr,tr;
vector<string> svec;
for (int i = 0; i < len1; i++){
string str;
for (int k = i; k > 0; k--){
str += '0';
}
num = str1[i] - '0';
r = 0;
for (int j = 0; j < len2; j++){
t = str2[j] - '0';
sr = num * t + r;
if (sr >= 10){
tr = sr % 10;
str += tr + '0';
r = sr / 10;
}
else
str += sr + '0';
}
if (r != 0)
str += r + '0';
svec.push_back(str);
}
return svec;
}
string ADD(vector<string> svec){
int sr = 0;
int l = svec[0].size();
string str;
int n = svec.size();
for (int i = 1; i < n; i++){
if (l < svec[i].size())
l = svec[i].size();
}
int r = 0;
for (int i = 0; i < l; i++){
int sum = 0;
for (int j = 0; j < n; j++){
if (i >= svec[j].size())
sum += 0;
else
sum += svec[j][i] - '0';
}
sum += r;
sr = sum % 10;
str += sr + '0';
r = sum / 10;
}
if (r != 0)
str += r + '0';
reverse(str.begin(), str.end());
return str;
}
int main(){
int n1;
while (cin >> n1){
string str = "1";
while (n1){
reverse(str.begin(), str.end());
str = ADD(Mul(str, IntToStr(n1)));
n1--;
}
cout << str << endl;
}
return 0;
}
大数相乘(n阶乘实现)
最新推荐文章于 2020-06-02 15:03:08 发布