我必须编写用c ++划分2个大数字的程序,除了字符串之外不能保存在任何其他变量中(我猜)。 数字是整数。
我写了一些代码,它使用我以前的函数从数字中减去,但它不适用于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;