14
Апр
2017

Реализация класса больших чисел с длинной арифметикой

Пишу класс для больших чисел длиной до 2^512. Использую массив unsigned __int64. Сложение чисел происходит неадекватно, за счёт переменной c. Алгоритм брал из книги. Можете подсказать рабочий алгоритм?

class BigInt {
public:
    unsigned __int64 number[8];

    BigInt() 
    {
        for (int i = 0; i < 8; i++) 
        {
            number[i] = 0;
        }
    }

    const BigInt operator+(const BigInt& rv) const 
    {
        BigInt res;
        unsigned __int64 c = 0, t = 0;
        for (int i = 0; i < 8; i++) 
        {
            t = number[i] + rv.number[i] + c;
            c = t % LLONG_MAX;
            res.number[i] = c;
        }
        res.number[7] = t;
        return res;
    }
};

Источник: https://ru.stackoverflow.com/questions/653884/%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0-%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D1%85-%D1%87%D0%B8%D1%81%D0%B5%D0%BB-%D1%81-%D0%B4%D0%BB%D0%B8%D0%BD%D0%BD%D0%BE%D0%B9-%D0%B0%D1%80%D0%B8%D1%84%D0%BC%D0%B5%D1%82%D0%B8%D0%BA%D0%BE%D0%B9

Тебе может это понравится...

Добавить комментарий