使用字符串在c ++中划分大数字

时间:2018-01-14 16:04:53

标签: c++ divider

我必须编写用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;

0 个答案:

没有答案