给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。
输入格式
共两行,第一行包含整数 A,第二行包含整数 B。
输出格式
共一行,包含 A×B的值。
数据范围
1≤A的长度≤100000
0≤B≤10000
输入样例:
123456789 12345
输出样例:
1524074060205
高精度乘低精度
# include# include # include using namespace std; const int N = 1e6 + 10; vector mul(vector A,int b) { vector C; int t = 0; for(int i=0;i> a >> b; vector A,C; for(int i= a.size()-1;i>=0;i--) { A.push_back(a[i]-'0'); //逆序存储 } if (b) C=mul(A, b); //判断b是否为零 else C.push_back(0); for(int i=C.size()-1;i>=0;i--) { printf("%d", C[i]); } }
高精度乘高精度
#include#include # include using namespace std; vector mul(vector & A, vector & B) { vector C(A.size() + B.size(), 0); // 初始化为 0,两数相乘得数的位数小于其位数之和 int t = 0; for (int i = 0; i < A.size(); i++) { for (int j = 0; j < B.size(); j++) { C[i + j] += A[i] * B[j]; } } for (int i = 0; i < C.size(); i++) { t += C[i]; C[i] = t % 10; t /= 10; } while (C.size() > 1 && C.back() == 0) { C.pop_back(); } // 去前导零 return C; } int main() { string a, b; cin >> a >> b; vector A, B; for (int i = a.size() - 1; i >= 0; i--) { A.push_back(a[i] - '0'); } for (int i = b.size() - 1; i >= 0; i--) { B.push_back(b[i] - '0'); } vector C = mul(A, B); for (int i = C.size() - 1; i >= 0; i--) { cout << C[i]; } return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)