избегая переполнения при умножении очень большого целого числа на c ++

На днях я решал одну задачу программирования умножения, в которой мультипликация (a1, a2, .. an) может быть 1 <= ai <= 10 ^ 9. Поэтому мой вопрос заключается в том, как умножить эти числа, чтобы они всегда оставались в длинном диапазоне в C ++.

Должен ли я использовать какой-либо мод (например, 10 ^ 9 + 7), но не упоминается о том, использовать его или нет?

Я использовал нормальное умножение с / без mod 10 ^ 9 + 7 только тщетным. Также попробовал удачу с Русским Крестьянским Умножением с mod 10 ^ 9 + 7

long long mulmod(long long a, long long b)
{
    long long res = 0; // Initialize result
    a = a % mod;
    while (b > 0)
    {
        // If b is odd, add 'a' to result
        if (b % 2 == 1)
            res = (res + a) % mod;

        // Multiply 'a' with 2
        a = (a * 2) % mod;

        // Divide b by 2
        b /= 2;
    }

    // Return result
    return (res % mod);
}

все еще не принято решение. :-(

Отредактируйте 1: ll до длинного.

c++,integer,largenumber,

-3