您的位置:首页 > 职场人生

谷歌面试题:判断一个自然数是否是某个数的平方

2011-11-14 21:53 309 查看
题目:

不用开方,判断一个自然数是否是某个数的平方。

分析:

一个数N,二进制形式有n位,N一定小于2^(n+1),所以根号N一定小于2^((n+1)/2),所以N除以2^((n+1)/2)一定小于根号N。

代码:

#include <iostream>
#include <math.h>

using namespace std;

bool isPowered(int num)
{
int tempnum = num;
int bitCount = 0;
do
{
tempnum >>= 1;
++bitCount;
} while (tempnum != 0);

for (int i = num >> ((bitCount+1) / 2); true; ++i)
{
int powi = i * i;
if (powi == num)
{
return true;
}else if (powi > num)
{
return false;
}
}
}

void main()
{
cout << isPowered(10) << " " << sqrtf(10) << endl;
cout << isPowered(100) << " " << sqrtf(100) << endl;
cout << isPowered(1000) << " " << sqrtf(1000) << endl;
cout << isPowered(10000) << " " << sqrtf(10000) << endl;
cout << isPowered(100000) << " " << sqrtf(100000) << endl;
cout << isPowered(1000000) << " " << sqrtf(1000000) << endl;
cout << isPowered(1000001) << " " << sqrtf(1000001) << endl;
cout << isPowered(1000000000) << " " << sqrtf(1000000000) << endl;
cout << isPowered(31111 * 31111) << " " << sqrtf(31111 * 31111) << endl;

}

一个小小的想法,代码方面应该还可以优化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 优化
相关文章推荐