标签:name ace png return for -- pac alt image
不用保证A>=B
大数乘小数
这里是把小数b当成一个整体来乘。
1 #include <bits/stdc++.h> 2 using namespace std; 3 vector<int> mul(vector<int> &A, int b) { 4 vector<int> C; 5 int t = 0; //最开始的进位是0 6 for (int i = 0; i < A.size() || t; i++) { //要么i没循环完,要么t不为0 7 if (i < A.size()) { 8 t += A[i] * b; //相乘再加上上一位的进位 9 } 10 C.push_back(t % 10); //当前这一位的结果 11 t /= 10; //进位 12 //加法模板里,t不是0就是1 13 //乘法模板里,t就有很多情况了 14 } 15 while (C.size() > 1 && C.back() == 0) { 16 C.pop_back(); 17 } 18 return C; 19 } 20 int main() { 21 string a; //a很长 22 int b; //b很短 23 cin >> a >> b; 24 vector<int> A, C; 25 for (int i = a.length() - 1; i >= 0; i--) { 26 A.push_back(a[i] - ‘0‘); 27 } 28 C = mul(A, b); 29 for (int i = C.size() - 1; i >= 0; i--) { 30 cout << C[i]; 31 } 32 return 0; 33 }
大数乘以大数
1 #include <bits/stdc++.h> 2 using namespace std; 3 vector<int> mul(vector<int> &A, vector<int> &B) { 4 vector<int> C(A.size() + B.size()); 5 for (int i = 0; i < A.size(); i++) { 6 for (int j = 0; j < B.size(); j++) { 7 C[i + j] += A[i] * B[j]; 8 } 9 } 10 int t = 0; 11 for (int i = 0; i < C.size(); i++) { 12 t += C[i]; 13 C[i] = t % 10; 14 t /= 10; 15 } 16 while (C.size() > 1 && C.back() == 0) { 17 C.pop_back(); 18 } 19 return C; 20 } 21 int main() { 22 string a, b; 23 cin >> a >> b; 24 vector<int> A, B, C; 25 for (int i = a.size() - 1; i >= 0; i--) { 26 A.push_back(a[i] - ‘0‘); 27 } 28 for (int i = b.size() - 1; i >= 0; i--) { 29 B.push_back(b[i] - ‘0‘); 30 } 31 C = mul(A, B); 32 for (int i = C.size() - 1; i >= 0; i--) { 33 cout << C[i]; 34 } 35 return 0; 36 }
标签:name ace png return for -- pac alt image
原文地址:https://www.cnblogs.com/fx1998/p/12817303.html