本文主要是介绍【洛谷 P1303】A*B Problem 题解(高精度+字符串),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
A*B Problem
题目描述
给出两个非负整数,求它们的乘积。
输入格式
输入共两行,每行一个非负整数。
输出格式
输出一个非负整数表示乘积。
样例 #1
样例输入 #1
1
2
样例输出 #1
2
提示
每个非负整数不超过 1 0 2000 10^{2000} 102000。
思路
通过两层循环,将字符串 sa 和 sb 转换为数字后逐位相乘,将乘法结果的当前位存储在 ic 数组的对应位置中,将进位加到 ic 数组的下一位。
注意:
- 必须去除前导零,否则会导致WA。
- ic 数组的低位存储的是结果数值的高位。
- 结果可能为 0,当 sc 为空字符串时直接输出 0。
AC代码
#include <iostream>
#include <string>
#include <cstring>
#define AUTHOR "HEX9CF"
using namespace std;const int N = 1e4 + 5;string sa, sb, sc;
int ic[N];int main() {memset(ic, 0, sizeof(ic));cin >> sa >> sb;int la = sa.length();int lb = sb.length();for(int i = la - 1; i >= 0; i--) {for(int j = lb - 1; j >= 0; j--) {int mul = (sa[i] - '0') * (sb[j] - '0');int sum = mul + ic[i + j + 1];ic[i + j + 1] = sum % 10;ic[i + j] += sum / 10;}}sc = "";for(int i = 0; i < la + lb; i++) {if(sc.empty() && !ic[i]) {continue;}sc += to_string(ic[i]);}if(sc.empty()) {cout << 0 << endl;} else {cout << sc << endl;}return 0;
}
这篇关于【洛谷 P1303】A*B Problem 题解(高精度+字符串)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!