策略:一直WA的原因是没有考虑输入字符串可以为0的情况。。
#include <iostream>
#include <string>
using namespace std;
void clear(string &s);
void reset(string &s1,string &s2)//补位,使两个字符串长度相等,并在前面补0
{
string str1,str2;
if(s1.length() > s2.length())
{
int size = s1.length() - s2.length();
for(int i = 0;i <= size;i++)
{
str2.append("0");
}
str2.append(s2);
str1.append("0");
str1.append(s1);
s1 = str1;
s2 = str2;
}
else if(s1.length() < s2.length())
{
int size = s2.length() - s1.length();
for(int i = 0;i <= size;i++)
{
str1.append("0");
}
str1.append(s1);
str2.append("0");
str2.append(s2);
s2 = str2;
s1 = str1;
}
else
{
str1.append("0");
str2.append("0");
str1.append(s1);
str2.append(s2);
s1 = str1;
s2 = str2;
}
}
void addition(string &result,string s)//加法
{
reset(result,s);
string temp = result;
for(int i = 0;i < temp.length();i++)
temp[i] = '0';
for(int i = result.length() - 1;i >= 0;i--)
{
int a = result[i] - '0';
int b = s[i] - '0';
int c = temp[i] - '0';
int m = a + b + c;
if(m > 9)
{
int t1 = m - 10;
temp[i] = t1 + '0';
int t2 = temp[i - 1] - '0';
t2++;
temp[i - 1] = t2 +'0';
}
else
{
temp[i] = m + '0';
}
}
result = temp;
clear(result);
}
void clear(string &s)//清楚字符串前面多余的0
{
string temp = "";
int count = 0;
for(int i = 0;i < s.length();i++)
{
if(s[i] == '0')
count++;
else
break;
}
temp = s.substr(count,s.length() - count);
s = temp;
}
string multiply(string s1,string s2)
{
string result;
for(int i = s2.length() - 1;i >=0;i--)
{
for(int j = '1' - '0';j <= s2[i] - '0';j++)
addition(result,s1);
s1 = s1 + '0';
}
return result;
}
int main()
{
int n;
cin >> n;
string s1,s2;
while(n--)
{
cin >> s1 >> s2;
if(s1 == "0" || s2 == "0")
cout << "0" << endl;
else
{
string result = multiply(s1,s2);
cout << result << endl;
}
}
return 0;
}