大数相乘(n阶乘实现)

来源:互联网 发布:免费淘宝推广软件 编辑:程序博客网 时间:2024/06/05 02:27
#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;}elsestr += 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;}

0 0
原创粉丝点击