可能重复:
Fastest way to determine if an integer's square root is an integer
有人知道逻辑找出一个数字是完美的正方形吗? (Other than Newtons Method or Synthetic Division Method
)
For Eg:- 4, 16, 36, 64 are Perfect Squares.
我将以441
的形式给出输入,逻辑应该说明它是否是完美的正方形。
这是亚马逊访谈中提出的一个问题。
我想完成任何内置函数
答案 0 :(得分:18)
没有Math.Sqrt,甚至没有乘法:
static bool IsSquare(int n)
{
int i = 1;
for (; ; )
{
if (n < 0)
return false;
if (n == 0)
return true;
n -= i;
i += 2;
}
}
注意,正方形是奇数整数的部分和。 i
取值1,3,5,7 ......部分和1,1 + 3 = 4,1 + 3 + 5 = 9,...是正方形。因此,在n -= i
之后,我们从n
的原始值中减去了正方形,我们可以将结果与0进行比较。
答案 1 :(得分:3)
我要问采访者的第一个问题是,“问题的限制是什么?”也就是说,输入数量有多大?如果它足够小,那么你可以预先计算所有完美的sqaures并将它们存储在字典中:
IDictionary<long, bool> squares = new Dictionary<long, bool>;
for(long i = 1; i*i <= MAX_NUM; ++i) {
squares[i*i] = true;
}
然后,要找出一个数字x是否是一个完美的正方形,你只需检查正方形[x]以查看它是否为真。
答案 2 :(得分:0)
根据这一点可行。
public Boolean IsSquare(double input)
{
double root, product;
Boolean isSquare,isGTInput;
root = 1;
product = 0;
isSquare = false;
isGTInput = false;
while (!isSquare && !isGTInput)
{
product = root * root;
if (product == input)
isSquare = true;
else if (product > input)
isGTInput = true;
root += 1;
}
return isSquare;
}