输入a,b(a<=1000000000000000)(b<=1000000000000000)输出a*b的值
时间: 2024-09-22 10:04:22 浏览: 33
对于非常大的整数a和b,单纯直接相乘可能会导致溢出,并且效率低下。在这种情况下,我们可以使用一些高精度的库,例如C++标准库中的`<int128>`(如果你的编译器支持),或者是第三方库如GMP(GNU Multiple Precision Arithmetic Library)。这里简单提供一个基于`long long`类型的解决方案,用于表示不超过1e18的整数:
```cpp
#include <iostream>
#include <cstdint>
// 如果编译器支持int128,可以替换为std::int128_t
typedef __int128_t big_int;
big_int multiplyBigInt(big_int a, big_int b) {
return a * b;
}
int main() {
big_int a, b;
std::cout << "请输入两个不超过1e18的整数: ";
std::cin >> a >> b;
if (std::cin.fail()) {
std::cerr << "输入错误!" << std::endl;
return -1;
}
big_int result = multiplyBigInt(a, b);
// 输出结果可能超出普通整数范围,可以先转换成字符串显示
std::cout << "它们的乘积是: " << static_cast<std::uint64_t>(result) << std::endl;
return 0;
}
```
注意,尽管这种方法可以在大多数现代编译器上工作,但它仍然受限于你的平台对`__int128_t`的支持程度。若超过这个范围,你需要使用专门设计的大数库。
阅读全文