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 }

 

posted @ 2022-10-28 20:32  葛杨杨  阅读(167)  评论(0编辑  收藏  举报