12*34 = 12
x 34
-----
48
36
-----
408
#include <iostream>
#include <string>
using namespace std;
//进位加,递归处理所有的进位
void carry_add(string &res, size_t index, int num)
{
int tmp = res[index] - '0' + num;
if (tmp > 9){
res[index] = tmp % 10 + '0';
carry_add(res, index + 1, tmp / 10);
}else{
res[index] = tmp + '0';
}
}
string mul(string bignum1, string bignum2)
{
//res的最低位保存积的个位
string res(bignum1.length() + bignum2.length() + 1, '0');
//倒置,方便处理,让bignum1和bignum2的最低位保存数字的个位
for (size_t i = 0, j = bignum1.length() - 1;
i < j; i++, j--)
std::swap(bignum1[i], bignum1[j]);
for (size_t i = 0, j = bignum2.length() - 1;
i < j; i++, j--)
std::swap(bignum2[i], bignum2[j]);
for (size_t i = 0; i < bignum2.length(); i++)
{
for (size_t j = 0; j < bignum1.length(); j++)
{
size_t index = i + j;
int tmp = (bignum1[j] - '0') * (bignum2[i] - '0');
carry_add(res, index, tmp);
}
}
//将结果倒置
for (size_t i = 0, j = res.length() - 1;
i < j; i++, j--)
std::swap(res[i], res[j]);
//去掉前面的0
for (string::iterator iter = res.begin();
iter != res.end(); ++iter)
{
if (*iter != '0'){
if (iter != res.begin())
res.erase(res.begin(), iter);
break;
}
}
return res;
}
int main()
{
string bignum1;
string bignum2;
cout << "Please input num1: ";
cin >> bignum1;
cout << endl;
cout << "Please input num2: ";
cin >> bignum2;
cout << endl << "num1 * num2 = ";
string res = mul(bignum1, bignum2);
cout << res << endl;
getchar();
getchar();
return 0;
}