非常大数字的正方形

时间:2014-03-29 10:45:20

标签: c++

给定一个16位的整数。我必须使用位操作或c ++中的任何其他方法打印它的方块。我试图将该数字作为long int但是它不起作用,因为long int的范围较小比所需的输入。

2 个答案:

答案 0 :(得分:2)

您始终可以选择更大的原始数据类型,但通常这只会延迟问题。一旦你想要拿一个很长的正方形,你应该怎么做呢?

如果您需要非常大的数字,则需要更抽象的封装数据表示。 C ++有适合这项工作的工具,Boost库通过Boost.Multiprecision广泛使用它们。具体来说,请查看<boost/multiprecision/cpp_int.hpp>的文档。它很复杂但功能强大。

答案 1 :(得分:0)

正方形可以完美表示为无符号整数(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;
}

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