EDIT: Теперь метод (функция деления) ниже работает правильно!Отдел больших целых чисел, представленных как строка в C++
Я работаю над разделением больших целых чисел в C++. Я уже написал функции для сложения и вычитания, но у меня проблемы с разделением. Вот Big_Integer класс:
big_int.h
char toChar(int num)
class Big_Int
{
public:
Big_Int();
Big_Int(const Big_Int&);
Big_Int(string);
Big_Int& operator=(const Big_Int&);
Big_Int operator+(const Big_Int&);
friend Big_Int difference(const Big_Int&, const Big_Int&);
friend Big_Int divide(const Big_Int&, long long);
friend Big_Int operator - (const Big_Int&, const Big_Int&);
friend bool operator<(const Big_Int&, const Big_Int&);
friend bool operator>(const Big_Int&, const Big_Int&);
friend bool operator<=(const Big_Int& , const Big_Int&);
friend bool operator>=(const Big_Int& , const Big_Int&);
friend Big_Int operator/(const Big_Int&, long long);
friend bool less_than(const Big_Int&, const Big_Int&);
friend bool less_or_eq(const Big_Int&, const Big_Int&);
friend bool operator==(const Big_Int&, const Big_Int&);
friend ostream& operator<<(ostream& , const Big_Int&);
friend istream& operator>>(istream&, const Big_Int&);
private:
string number;
};
Вот моя функция деление:
Big_Int divide(const Big_Int& in, long long den)
{
string w_dvt = in.number;
int carry = 0;
string dvt = 0;
string result;
while (!(w_dvt.empty()))
{
if ((w_dvt[0] == '0') && (carry == 0))
{
result += w_dvt[0];
w_dvt = w_dvt.substr(1);
}
else {
int i = 0;
for (; i < w_dvt.size(); ++i)
{
dvt += w_dvt[i];
if (stoi(dvt) >= den) break;
}
w_dvt = w_dvt.substr(i + 1);
long long i_dvt = stoi(dvt);
int res = i_dvt/den;
carry = i_dvt%den;
i_dvt = carry;
dvt = to_string(i_dvt);
result += toChar(res);
}
}
return Big_Int(result);
}
Big_Int operator/(const Big_Int& in, long long den)
{
Big_Int res = divide(in, den);
return res;
}
char toChar(int num)
{
char ch = '0'+ num ;
return ch;
}
Вот основная программа:
int main()
{
string num1, num2;
cin >> num1;
Big_Int i1(num1);
cin >> num2;
Big_Int i2(num2);
Big_Int divs = i1/8;
cout << divs << endl;
}
Он компилирует хорошо, но когда я пытаюсь запустить его это прерывается с сообщением:
"Expression: invalid null pointer"
Я внес некоторые изменения в свою программу, чтобы устранить эту проблему, но она по-прежнему прерывается с тем же сообщением. Если у кого-нибудь есть идеи относительно проблемы с моим кодом, я был бы признателен.
'ошибка C3861: 'toChar': идентификатор не найден' –
Запуск в отладчике для сбоя сбоев и помощь в поиске места, где они происходят в вашем коде. Если вы не можете понять это, то по крайней мере сообщите нам, где в вашем коде произошел сбой, и значения всех задействованных переменных. –
@ Chhristian Hackl Я опубликовал только часть моей программы, toChar определен выше. –