【发布时间】:2022-02-02 20:36:10
【问题描述】:
我正在尝试将两个大数组合在一起,这将导致“long long int”。例如:
a = -1716642972;
b = 43828807;
z = a and b;
在这种情况下,我希望 z 等于 -171664297243828807。
我知道你们中的大多数人都在想,“你们到底为什么要这样做?”。当我说有理由想要这样做时,你只需要相信我。
了解详情:
- 变量 a 预计为 10 位数字,因此我将其定义为“长”整数。只是为了安全起见。它可以是负数或正数。
- 变量 b 将是 time 函数中 seconds 值的最后 8 位数字。这意味着变量 b 有可能等于 00000000。该数字始终为正数。
- 变量 z 将是变量 a 和 b 的组合。它必须是“long long int”。变量 a 总是在变量 b 之前。如果变量 b 等于 00000000,那么我希望在变量 z 中实现:-171664297200000000 或 -171664297200000001 等...
我尝试将“long long z”设置为等于 (a*100000000)+b,但我最终得到了一些疯狂的数字。这也给出了溢出的警告。我假设这与整数类型有关。任何帮助将不胜感激。谢谢!
【问题讨论】:
-
将
a乘以100000000。如果a为负数,则将b乘以-1。将这两个值相加。 -
确保在进行计算之前将
a和b转换为long long。否则计算将使用long值完成,并且会溢出。 -
创建一个函数来计算 b 的长度,将 a 乘以 10^len(b),然后将 b 添加(或减去,取决于 a 的符号)到新的 a。确保 a 和 b(以及 sum)变量都是 long long。
-
你需要考虑
a的符号。它总是消极的吗? -
只需将
100000000更改为100000000LL应该会有所帮助。
标签: c integer concatenation long-integer long-long