Решение может быть либо
- Используя более широкие целые числа (128+), которые уже были решены: представление 128-битных чисел в 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 до длинного.
Решение может быть либо