一简单的算法题目,欢迎大家提出更高效的解决办法.................
Posted on 2011-03-03 14:01 grayboy 阅读(5051) 评论(81) 编辑 收藏 举报今天参加某公司的面试,笔试有一简单的算法题目,答题速度慢,
刚要解答的时候,面试官来了,就没写,现在写在这里,和大家讨论下!
题目:给定一个整数num,判断这个整数是否是2的N次方
比如,2,4,8是2的那次方,6,10不是2的N次方
我的解决方法:
感谢undefined提出2的0次方等有1的问题,现已修正!
1)不断的循环temp=2*2*2*2......*2,当某次temp==num是可确定是2的N次方,
public static bool Check1(int num)
{
int i = 1;
while (true)
{
if (i > num)
return false;
if (i == num)
return true;
i = i * 2;
}
}
2)不断的循环num%2,如果不等于0,return false,如果等于0,num=num/2,一直做到num=1
public static bool Check2(int num)
{
if (num == 1)
return true;
else
{
do
{
if (num % 2 == 0)
num = num / 2;
else
return false;
}
while (num != 1);
return true;
}
}
其实这两种算法的思路都是相同的,但是第二种相对第一种更高效写,因为如果不是2的N次方,可以少循环很多次!
大家有更高效的算法请赐教!
作者:GrayBoy
出处:http://www.cnblogs.com/mybear/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
互相学习,共同进步!。