【问题标题】:Check if the number a perfectSquare (number has more than 15 digits) [duplicate]检查数字是否为完美正方形(数字超过 15 位)[重复]
【发布时间】:2013-04-13 15:13:49
【问题描述】:

我希望计算一个超过 15 位的数字的平方根,如果可能的话,100 位会很棒

像 100000000000000 这样的数字

目前我使用 C 和整数作为数据类型

int IsPerfectSquare(int number)
{

   if (number< 0)

   return 0;

   int root = (round(sqrt(number)));

    if(number == (root * root))

    {        
       return 1;    
    }    
    else
    {        
      return 0;    
    }
}

但是 double 或 long double 是否可以容纳 15 位或更多位

语言没有障碍。 我也可以用 C# 编写代码

谢谢:)

【问题讨论】:

标签: c# c++ c square-root


【解决方案1】:

在 C# 中,您可以使用 decimal 获取最多 29 位数字,使用 BigInteger 获取任意多位数字。

但是,您需要一种不同的技术来判断 100 位 BigInteger 是否是一个完美的正方形,因为我知道没有现成的“根”函数。

【讨论】:

  • 你总是可以使用巴比伦方法的变体来收敛于数字的平方根:en.wikipedia.org/wiki/…
  • @Patashu:有很多方法可以计算整数的平方根。有关一些示例,请参阅链接的重复答案。
【解决方案2】:

C 中整数的大小取决于平台,因此无法保证它可以容纳多少位。您可以查看 GNU Multiple Precision math library 来处理 C 中的大数字。

【讨论】:

    【解决方案3】:

    在 C++ 中,您可以使用以下函数检查 long double 可以容纳多少个 bigs:

     std::cout << std::numeric_limits<long double>::digits10 << std::endl;
    

    如果您真的想处理带有100 数字的数字,您需要编写自己的 BigInteger 类。

    【讨论】:

      猜你喜欢
      • 2016-03-07
      • 2015-11-06
      • 2020-10-03
      • 2017-11-15
      • 2017-09-04
      • 2016-07-03
      • 2019-01-12
      相关资源
      最近更新 更多