P1303 A*B Problem
题目描述
给出两个非负整数,求它们的乘积。
输入格式
输入共两行,每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
输入输出样例
输入 #1
1 2
输出 #1
2
说明/提示
每个非负整数不超过 10^{2000}102000。
此题的核心在于不忙盲目模拟平常的乘法计算,而是要提取出公式 c[i+j]=a[i]+b[j], 这样就简洁多了,上代码:
1 #include <iostream> 2 #include<string.h> 3 using namespace std; 4 int a[2005], b[2005], c[4005]; 5 int main(){ 6 string sa, sb; 7 cin >> sa >> sb; 8 if (sa == "0" or sb == "0") { 9 cout << 0; 10 return 0; 11 } 12 int la = sa.length(); 13 int lb = sb.length(); 14 int lc = la + lb; 15 //以字符串格式输入并转换存入数组 16 for (int i = 0; i < la; i++) 17 a[i] = sa[la - i - 1]-'0'; 18 for (int i = 0; i < lb; i++) 19 b[i] = sb[lb - i - 1]-'0'; 20 //诸位相乘 21 for (int i = 0; i < la; i++) 22 for (int j = 0; j < lb; j++) 23 c[i + j] += a[i] * b[j]; 24 //进位 25 for (int i = 0; i < lc; i++) { 26 c[i + 1] += (c[i] / 10); 27 c[i] %= 10; 28 } 29 while (!c[lc]) { 30 lc--; 31 } 32 for (int i = lc; i >= 0; i--) 33 cout << c[i]; 34 35 return 0; 36 }