#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/