Я должен написать программу, которая делит 2 больших числа в C ++, которые не могут быть сохранены в любых других переменных, кроме строк (я думаю).
Числа являются целыми числами.
Я написал некоторый код, который использует мою предыдущую функцию для вычитания из чисел, но он не работал с такими операциями, как 1000/1 или 1234567890/2: /
Не могли бы вы дать мне несколько советов, как я могу сделать такую функцию?
Вот мои коды:
(вычитание из чисел)
string a=xa, b=xb, tmp_a = "", tmp_b = "", wynik = "", tmp_left_a, tmp_left_b, wynik_return, zamiana;
int dl_a = 0, dl_b = 0, pozyczka = 0, end_a = 0, end_b = 0, tmp_wynik = 0, left_a = 0, left_b = 0, test = 9,spr_a,spr_b;
bool wieksza = false;
string *wsk_a = &a;dl_a = a.length();
dl_b = b.length();
if (dl_b > dl_a)
{
wieksza = true;
zamiana = a;
a = b;
b = zamiana;
}
if (dl_a == dl_b)
{
if (a == b)
return "0";
else
{
for (int i = 0; i < dl_a; i++)
{
tmp_a = a[i];
tmp_b = b[i];
spr_a = stoi(tmp_a);
spr_b = stoi(tmp_b);
if (spr_a != spr_b)
{
if (spr_a > spr_b)
break;
if (spr_b > spr_a)
{
wieksza = true;
zamiana = a;
a = b;
b = zamiana;
break;
}
}
}
}
}dl_a = a.length();
dl_b = b.length();
int *wsk_dl = &dl_a;for (int i = dl_b - 1; i >= 0; i--)
{
tmp_a = a[dl_a - 1];
tmp_b = b[i];
end_a = stoi(tmp_a);
end_b = stoi(tmp_b);
tmp_wynik = end_a - end_b;
if (tmp_wynik < 0)
{
zamien(*wsk_a, dl_a - 2, *wsk_dl);
tmp_wynik = (end_a + 10) - end_b;
wynik += to_string(tmp_wynik);
}
else
{
wynik += to_string(tmp_wynik);
}
dl_a--;
}
for (int i = 0; i <= dl_a - 1; i++)
{
tmp_a = a[i];
wynik += tmp_a;
}
bool minus = false;
for (int i = wynik.length() - 1; i >= 0; i--)
{
if (wieksza)
{
wynik_return += '-';
wieksza = false;
minus = true;
}
wynik_return += wynik[i];
}
if (minus)
{
while (wynik_return[1] == '0')
{
wynik_return.erase(1, 1);
}
}
else
{
while (wynik_return[0] == '0' && (wynik_return[0] == '-' || wynik_return[0] != '-'))
{
wynik_return.erase(0, 1);
}
}
return wynik_return;
}
Функция деления: (добавлено одно условие, которое проверяет, если b == 1, чтобы улучшить скорость программы)
string a=xa, b=xb, wynik;
long unsigned int tmp_wynik = 0;
while (a >= b || a.length() > b.length())
{
if (a >= b && b.length() > a.length())
break;
if (b == "1")
return a;
a = odejmowanie(a, b);
tmp_wynik++;
}
wynik = to_string(tmp_wynik);
return wynik;
Задача ещё не решена.
Других решений пока нет …