#include <iostream>
#include <string>
#include <vector>
#include <deque>
using std::cout;
using std::endl;
using std::string;
using std::vector;
using std::deque;
class Solution
{
public:
string bigNumMulti(const string & a,const string & b){
//--------------------
//a,b格式:
//1)a,b非空且都是数字字符
//2)a,b不带正负符号
//3)a,b没有前导0
//如2342332,23300,0合法
//+2322,-23423,0243不合法
//由调用函数保证a,b的格式
//--------------------
if( a == "0" || b == "0") return "0";
int len1 = a.size();
int len2 = b.size();
deque<int> result(len1+len2-1,0);
//先模拟手算加到各个位置上,不处理进位
for(int i = len1-1;i >=0 ;--i){
for(int j = len2-1;j >= 0;--j){
result[i + j] += toInt(a[i]) * toInt(b[j]);
}
}
//处理进位
int carry = 0;
for(int k = result.size()-1;k >= 0;--k){
result[k] += carry;//加上低位的进位
carry = result[k] / 10;//向高位进位
result[k] %= 10;
}
//处理最后的进位
while(carry > 0){
result.push_front(carry % 10);
carry /= 10;
}
//转换成string返回
string resultStr(result.size(),'0');
for(size_t i = 0;i < result.size();++i){
resultStr[i] += result[i];
}
return resultStr;
}
private:
inline int toInt(char c){//将数字转换成所代表的值
return c - '0';
}
};
int main(){
Solution sl;
string a = "123456789";
string b = "0";
cout << sl.bigNumMulti(a,b) << endl;
}