6.Acwing基础课第793题-简单-高精度乘法

发布时间 2023-08-22 18:22:34作者: CodeMagicianT

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这个条件确保了循环在以下两种情况下继续:

  1. 还有未处理的数字在向量A中。
  2. 仍然存在一个非零的进位t