一个非常大的数字的平方

Square Of A Very Large Number

本文关键字:数字 非常 一个      更新时间:2023-10-16

给定一个 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;
}

拥有有符号整数,您将面临溢出并获得负数。