谷歌面试题:判断一个自然数是否是某个数的平方
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;
}
一个小小的想法,代码方面应该还可以优化。
不用开方,判断一个自然数是否是某个数的平方。
分析:
一个数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;
}
一个小小的想法,代码方面应该还可以优化。
相关文章推荐
- 每日一道算法题:Google面试题:判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方。当然不能使用开方运算—谷歌
- 谷歌:判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方。当然不能使用开方运算—谷歌
- 判断一个自然数是否时某个数的平方
- 判断一个自然数是否是某个数的平方
- java-判断一个自然数是否是某个数的平方。当然不能使用开方运算
- 判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方(不能使用开方运算)
- 判断一个自然数是否是某个数的平方
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
- 判断一个整数是否满足完美平方?
- 判断一个四边形是否是矩形——面试题
- 【IT笔试面试题整理】判断一个树是否是另一个的子树
- 面试题:判断一个节点是否在一棵二叉树中
- 【面试题】剑指offer03--判断一个数是否在一个二维数组中
- 【华为面试题】给定一个数字(整数),判断它是否回文
- 判断一个字符串中的字符是否唯一(面试题1)
- 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?