Anybody Knows the Logic To Find Out a Number is Perfect Square or not?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Fastest way to determine if an integer's square root is an integer
有人知道找出一个数是否是完全平方的逻辑吗?(
1 | For Eg:- 4, 16, 36, 64 are Perfect Squares. |
我将以
这是亚马逊采访中问的一个问题。
我想用任何内置功能来完成
没有数学,sqrt,甚至没有乘法:
1 2 3 4 5 6 7 8 9 10 11 12 13 | static bool IsSquare(int n) { int i = 1; for (; ; ) { if (n < 0) return false; if (n == 0) return true; n -= i; i += 2; } } |
注意,平方是奇数的部分和。
我要问面试官的第一个问题是,"问题的制约因素是什么?"也就是说,输入数字可以有多大?如果它足够小,那么您可以预先计算出所有完美的平方数,并将它们存储在字典中:
1 2 3 4 | IDictionary<long, bool> squares = new Dictionary<long, bool>; for(long i = 1; i*i <= MAX_NUM; ++i) { squares[i*i] = true; } |
然后,为了找出一个数字x是否是一个完美的正方形,你只要检查正方形[x]看看它是否是真的。
沿着这条线的某些东西会起作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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; } |