一个非常大的数字的平方
Square Of A Very Large Number
给定一个 16 位整数。我必须使用位运算或 c++ 中的任何其他方法打印其正方形。我试图将数字作为长整型,但它不起作用,因为长整型的范围小于所需的输入。
您始终可以选择更大的基元数据类型,但这通常只会延迟问题。一旦你想拿一个长长的正方形,你应该怎么做,真的吗?
如果你需要非常大的数字,你需要一个更抽象的、封装的数据表示。C++为这项工作提供了合适的工具,Boost 库通过 Boost.Multiprecision 广泛使用它们。具体来说,请查看<boost/multiprecision/cpp_int.hpp>
的文档。它很复杂,但功能强大。
正方形可以完美地表示为无符号整数(32 位):
#include <iostream>
#include <cstdint>
int main()
{
std::int32_t s = (std::int32_t(1) << 16) - 1;
std::uint32_t u = std::abs(s);
std::uint32_t square = u * u;
std::cout << square << " = " << std::hex << square << 'n';
return 0;
}
拥有有符号整数,您将面临溢出并获得负数。
相关文章:
- 使用浮点数和双精度数的非常小数字的数学
- 如何非常快速地将数字添加到 Vector 中的一系列元素中
- 具有非常非常大数字的算术运算
- 如何在不导致堆栈溢出的情况下计算非常大的数字和很小的 HCF.我正在使用欧几里得算法
- 如何找到由公式计算的非常大的数字的最后一位数字?
- 找到非常大的数字的最右边的未设置位
- 在C++中使用限制和非常大的数字时出现问题
- C 非常奇怪的数字
- 在不使用递归的情况下将 FFT 应用于两个非常大的数字的乘法
- C++整数除法给出非常大的数字
- 在不进行线性搜索的情况下,在非常大的数组中找到比给定数字更小的数字
- 两个非常大的数字的乘积的第一个数字
- 找到非常大数字的分裂模型
- 在非常大的数字序列中查找句点
- 如何在 c++ 中存储非常大的数字
- 查找非常大的 2^n 数字的最后一位数字
- 将十进制转换为二进制,并计算其中的数字非常非常大
- 在GTest中,如何检查数字非常接近0?EXPECT_FLOAT_EQ不工作
- 输出文件中显示的数字非常大
- 数字的组成,其中数字非常大