#include <iostream>
#include <limits>
#include <cmath>

using namespace std;

int main()
{
    int number;
    cout << "Enter the number whose sqare root needs to be calculated";
    cin >> number;
    cout << "Square root of " << number << " is " << (int)sqrt((float)number)  << " OR " << sqrt((float)number) << endl;
    if( (int)sqrt((float)number) == sqrt((float)number) )
    cout << "The number is a perfect sqaure";
    else
    cout << "The number is not a perfect square";
    //To find the nearest perfect square if the number entered
   // is not a perfect square?

    return 0;
}

我希望我为检查完美正方形所做的一切没问题,但此外我想
如果输入的数字不是完全平方数,找出最接近完全平方数的数
有任何想法吗

最佳答案

实际上,这是更好的答案:

int number = 13;
int iRoot = static_cast<int>(sqrt(static_cast<float>(number)) + .5f);

你不需要在天花板或地板之间检查哪个更大,做一个简单的回合就可以了。

sqrt(13) 是 3.6,当您将 .5 转换添加到 4 时。 sqrt(12) 是 3.46,当您将 .5 转换添加到 3 时。(我们正在尝试舍入,这就是我们添加 .5 的原因)。正如你所看到的,当 number 更接近更高的根时,它会给你一个大于 0.5 的小数;当数字更接近较低值的根时,小数小于 0.5,就这么简单!

关于c++ - 如果输入的数字不是完全平方数,如何找到最近的完全平方数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6054909/

10-12 07:33