繁体   English   中英

两个非常大的数的除法

[英]division of two very large numbers

我想计算(a+b)/pow(2,s)

-10^10 ≤ s ≤ 10^10
1 ≤ a, b ≤ 10^9

但是,即使我将结果存储在long long它也将给出0。如果答案在long范围内,那么如何计算结果?

为此,您不需要除法...除以2的幂只是一个右移。

您可能需要一个好的bignum库,例如GMPlib

Bignum运算是一个很难解决的算法问题(有几本关于该主题的书,您仍然可以获得博士学位以改善它们)。 因此,不要尝试自己重新发明它们(如果您希望它们比每个人在小学学习的慢幼稚算法都更有效,则需要很多年的辛苦工作),而是使用现有的bignum库。

也许您有一些XY问题 ,实际上并不需要进行计算。 (您对问题的动机不足)。

您可以使用std::bitset<log2(10^9)>手动计算总和,然后对结果调用operator>>=( s )并通过std:bitset::to_ulong()获得long

您可以使用boost cpp_int ,这是最简单的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM