题目描述
给定两个正整数A和B,请你计算A * B的值。
输入格式
共两行,第一行包含整数A,第二行包含整数B。
输出格式
共一行,包含A * B的值。
数据范围:
1≤A的长度≤100000,
0≤B≤10000
输入样例:
2
3
输出样例:
6
算法
模拟手动乘法。
唯一有一点不同的就是每一次乘的时候,我们是用大整数A上的每一位数去乘小整数b整个整体,而不是乘以一位!
下面有个图解可参考(y总的):
参考文献
y总讲解视频
C++ 代码
#include <iostream>
#include <vector>
using namespace std;
//c = a * b;
//a是大整数 b是一个小整数
vector<int> mul(vector<int> &a , int &b){
//c是一个答案数组
vector<int> c;
/*
这个for循环是当i还没遍历完大整数a的时候,也就是没有乘完,
还有就是当还有进位t的时候就一直循环
*/
for(int i = 0 , t =0; i < a.size() || t; i++){
//t保存两数相乘的结果以及进位本身的值
if( i < a.size() ) t += a[i] * b;
//模10之后得到该位上的数,然后放进数组
c.push_back(t % 10);
//t除10 得到下一次的进位之数
t /= 10;
}
//这个是有一种特殊情况21432432*0=00000000;需要把多余的0给去掉
while(c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
int main(){
//a是一个大整数所以用字符串来读取,b是一个小数就不需要了
string a;
int b;
cin>>a>>b;
//把字符串a转换成数字,放进数组A中
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--)cout<<c[i];
cout<<endl;
return 0;
}