AcWing 793. 高精度乘法
原题链接
简单
作者:
BanLi
,
2021-01-25 09:34:11
,
所有人可见
,
阅读 271
新手记录
C++ 代码
#include<iostream>
#include<vector>
using namespace std;
vector<int> mul(vector<int> &sa, int b){
vector<int> sc;
int t = 0;
for(int i = 0; i < sa.size() || t; i++){ //判断条件为两个,主要是当i超过sa的长度时,t还不是0,即sa的最高位与
//b乘出来还有进位,此处将两个情况合在了一起
if(i < sa.size()) //由于上面判断条件的问题,所以当i超过sa的长度时,表明sa已经被乘完,不能再继续乘
t += sa[i] * b; //故单独做个判断,从而实现了t不为0时的单独处理(t不为0其实可以放在循环外面单独处理,看自己)
sc.push_back(t % 10); //乘出来放在当位的值
t /= 10; //计算进位值
}
while(sc.size() > 1 && sc.back() == 0) //若b为0时,会有很多位的0,需要清除并只留一个0
sc.pop_back();
return sc;
}
int main(){
string a;
int b;
cin >> a >> b;
vector<int> sa;
for(int i = a.size() - 1; i >= 0; i--)
sa.push_back(a[i] - '0');
auto sc = mul(sa, b);
for(int i = sc.size() - 1; i >= 0; i--)
printf("%d", sc[i]);
return 0;
}