字符串相加和字符串相乘
通过string类来实现大数相加,个位相加进十位,十位相加进百位。
通过不断相加和进位来实现大数相加。
auto end1 = int(num1.size() - 1);
auto end2 = int(num2.size() - 1);
string a;
a.insert(0, 1,'0');
int val = 0;
int b = num1.size();
int c = num2.size();
int max;
if (b > c)
{
max = b;
}
if(b<=c)
{
max = c;
}
for(int i=0;i<max;i++)
{
if (end1 >= 0 && end2 >= 0)
{
val = int(num1[end1]-'0') + int(num2[end2]-'0');
}
if (end1 < 0)
{
val = int(num2[end2] - '0');
}
if (end2 < 0)
{
val = int(num1[end1] - '0');
}//4 3
int wei = val % 10;//4 3
int jin = val / 10;//0 0
a[0] = char(wei+int(a[0]));
if (a[0]==':')
{
a[0] = '0';
a.insert(0, 1, '1');
}
else
{
a.insert(0, 1, char(jin + int('0')));
}
end1--;
end2--;
}
if (a[0] == '0')
{
a.erase(a.begin(), a.begin() + 1);
}
cout << a;
return a;
本题是通过先计算长数与短数的分别相乘来实现,如果相等的话就一样进行。
然后利用相加进行即可,低位要补0。
class Solution {
public:
string addStrings(string &num1, string &num2) {
int end1 = num1.size()-1;
int end2 = num2.size()-1;
if (end1 < end2)
{
swap(num1, num2);
swap(end1, end2);
}
int min = std::min(num1.size(), num2.size());
int max = std::max(num1.size(), num2.size());
string a;
string b;
b.insert(0, 1, '0');
if(num1[0]=='0'||num2[0]=='0')
{
return b;
}
for (int j = 0; j < min; j++)
{
a.clear();
a.insert(0, 1, '0');
for (int k = 0; k < j; k++)
{
a.push_back('0');
}
end1 = num1.size() - 1;
for (int i = 0; i < max; i++)
{
int val = int(num1[end1] - '0') * int(num2[end2] - '0');
int wei = val % 10;
int jin = val / 10;
a[0] = char(wei + a[0]);
if (a[0] >= ':')
{
char tmp = 0;
tmp = a[0];
a[0] = char(tmp - ':'+'0');
a.insert(0, 1, '1');
a[0] = char(jin + a[0]);
}
else
{
a.insert(0, 1, char(jin + '0'));
}
end1--;
}
if (a[0] == '0')
{
a.erase(a.begin(), a.begin() + 1);
}
b = addStrings(a, b);
end2--;
}
return b;
}
};