6.Acwing基础课第793题-简单-高精度乘法
题目描述
给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。
输入格式
共两行,第一行包含整数 A,第二行包含整数 B。
输出格式
共一行,包含 A×B 的值。
数据范围
1≤A的长度≤100000,
0≤B≤10000
输入样例
2
3
输出样例
6
思路解析:
算法:
时间复杂度:*O(nlog(n))*
解题思路:
代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<int> mul(vector<int>& A, int b)
{
vector<int> C;
int t = 0;
for (int i = 0; i < A.size() || t; i++)
{
if (i < A.size()) t += A[i] * b;//进位加乘积
C.push_back(t % 10);
t /= 10;
}
return C;
}
int main()
{
string a;
int b;
cin >> a >> b;
vector<int> A;
for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');
auto C = mul(A, b);
for (int i = C.size() - 1; i >= 0; i--) printf("%d", C[i]);
system("pause");
return EXIT_SUCCESS;
}
在这段代码中的循环条件:
for (int i = 0; i < A.size() || t; i++)
i < A.size()
确保当i
仍在向量A
的索引范围内时,循环会继续。
而|| t
表示"或者"的意思,它确保只要t
(进位)不为0,循环会继续,即使i
已经超出了向量A
的大小。
这样做的原因是,有可能在处理完向量A
的所有元素后,仍然存在进位。例如,想象一下A
是数字999,b
是5,那么结果将是4995。当你处理完最后一个9后,仍有一个进位4需要被处理。这个循环条件确保了这个进位被处理。
总结,i < A.size() || t
这个条件确保了循环在以下两种情况下继续:
- 还有未处理的数字在向量
A
中。 - 仍然存在一个非零的进位
t
。