Я пытаюсь вычесть 2 очень большие целые / большие числа, но я столкнулся с проблемой.Мой код работает для вычитаний, таких как 123 - 94, 5 - 29, но я не могу обойти крайние случаи.Например 13 - 15 должно привести к -2.Но если я наберу num1 - num2 - borrow + 10
на первой цифре, я получу 8, а borrow
станет 1. Переходя к последней цифре, я получаю 1 - 1 - borrow(=1)
, что оставляет мне -1
, поэтому мой конечный результат вместо -18
быть -2
.
Вот мой код для вычитания:
//Infint is the class for the very large number
Infint Infint::sub(Infint other)
{
string result;
Infint i1 = *this;
Infint i2 = other;
if (int(i1._numberstr.length() - i2._numberstr.length()) < 0)
{
Infint(result) = i2 - i1;
result._numberstr.insert(result._numberstr.begin(), '-');
return result;
}
else if (i1._numberstr.length() - i2._numberstr.length() > 0)
{
int diff = i1._numberstr.length() - i2._numberstr.length();
for (int i = diff; i > 0 ; --i)
{
i2._numberstr.insert(i2._numberstr.begin(), '0');
}
}
int borrow = 0;
int i = i2._numberstr.length() - 1;
for (; i >= 0 ; --i)
{
int sub = (i1._numberstr[i] - '0') - (i2._numberstr[i] - '0') - borrow;
if (sub < 0)
{
sub += 10;
borrow = 1;
}
else
borrow = 0;
result.insert(0, to_string(sub));
}
while (i > 0)
{
result.insert(result.begin(), i1._numberstr[i1._numberstr.length() - i]);
--i;
}
int j = 0;
while (result[j] == '0')
j++;
result.erase(0, j);
if (borrow == 1)
result.insert(result.begin(), '-');
return Infint(result);
}
Не могли бы вы помочь мне понять ошибки или ошибки в логике, которые я сделал?