在c++中乘非常大的整数时避免溢出
avoiding overflow while multiplying very large integer in c++
前几天我正在解决一个乘法编程问题,其中乘法数(a1,a2,…an)可以是1<= ai <= 10^9。因此,我的问题是如何将这些数字相乘,使它们在c++中始终保持在(长长)范围内。
我应该使用任何一种mod(如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 to long long。
解决方案可以是
- 使用更宽的整数(128+),这已经解决了:表示c 中的128位数字
- 使用浮点实数,在这种情况下,你会失去精度,以换取灵活性。
相关文章:
- 整数溢出,最大值为 pow(10,19)
- 模函数,避免C++整数溢出
- 优化正在杀死我在 clang 6 中的整数溢出检查
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 我很难理解这些关于检测整数溢出的评论
- 检测 32 位整数溢出
- 如何在没有整数溢出的情况下找到n%(k*k)
- C 中俄罗斯农民算法中的整数溢出
- 检查Android NDK COD中的整数溢出
- 对于特定情况的整数溢出似乎是由整数溢出引起的错误
- 如何修复整数溢出警告
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- 整数溢出是否会影响其他变量
- 为什么功能不给整数溢出
- 有符号整数溢出、内部函数和未定义的行为
- 整数溢出不会发生:它们从0重新启动
- 以下程序中最大 int 1000 000(在 int 范围内)的整数溢出
- 为什么Turbo C Wraparound每次签名的整数溢出,尽管签名的整数溢出是不确定的
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性