判断一个数是否为2的n的次方数,六种方法
2016-03-24 22:54
330 查看
判断一个数是否为2的n的次方数,是一个很简单的问题。但这里是以多种方式来解决此问题
方法一:将要判断的数转换成二进制数,从左至右,判断是否只有一个1
方法二:将要判断的数与它的前一个数进行按位运算,判断结果是否为0
方法三:将要判断的数转换成二进制数,并将其中的0全部舍去,最后判断最后的长度是否为1
方法四:将要判断的数转化成字节数组,判断其中的ASCII码
方法五:先%2,在除2,判断结果是否为1
方法六:设定一个基数为2,将要判断的数与基数比较,若基数小于判断的数,将基数乘2,直至最后大于或等于要判断的数
总结:综上,其实解决问题的基本思想只有两种,只是实现的方式不同而已。
将数转化为二进制,判断1的个数
将数进行% 、/ 运算判断
方法一:将要判断的数转换成二进制数,从左至右,判断是否只有一个1
public static boolean method01(int num){ if(Integer.toBinaryString(num).indexOf('1') == Integer.toBinaryString(num).lastIndexOf('1')){ return true; }else{ return false; } }
方法二:将要判断的数与它的前一个数进行按位运算,判断结果是否为0
public static boolean method02(int num){ if((num & (num-1)) == 0) return true; else return false; }
方法三:将要判断的数转换成二进制数,并将其中的0全部舍去,最后判断最后的长度是否为1
public static boolean method03(int num){ return Integer.toBinaryString(num).replaceAll("0", "").length() == 1; }
方法四:将要判断的数转化成字节数组,判断其中的ASCII码
public static boolean method04(int num) { if (num == 0) { return false; } boolean flag = true; String str = Integer.toBinaryString(num); byte[] bytes = str.getBytes(); for (int i = 1; i < bytes.length; i++) { System.out.println(bytes[i]); if (bytes[i] != 48) { flag = false; break; } } return flag; }
方法五:先%2,在除2,判断结果是否为1
public static boolean method05(int num){ int temp = num; while (temp % 2 == 0) { temp /= 2; } if (temp == 1) { return true; } else { return false; } }
方法六:设定一个基数为2,将要判断的数与基数比较,若基数小于判断的数,将基数乘2,直至最后大于或等于要判断的数
public static boolean method06(int num) { boolean flag = false; int baseNum = 2; while (true) { if (num == 1 || baseNum == num) { flag = true; break; } else if (baseNum < num) { baseNum = 2 * baseNum; } else { flag = false; break; } } return flag; }
总结:综上,其实解决问题的基本思想只有两种,只是实现的方式不同而已。
将数转化为二进制,判断1的个数
将数进行% 、/ 运算判断
相关文章推荐
- 小小程序员的忧伤
- 命令解析程序的编写
- Android中Activity启动模式学习笔记
- Android开发之滑动效果+页面分支跳转
- FZU 2206 函数求解(找规律)
- JavaScript 实现延迟合并处理任务
- C++ STL, sort用法。
- Oracle学习之merge
- AngularJS执行流程详解
- iOS 正则表达式的使用 —— HERO博客
- AndroidStudio下快速生成Model,如何为Model瘦身
- 理解面向对象
- 丑数(JAVA)
- Python 基础三、元组
- SICP学习笔记:求幂,用对数的算法复杂度解决fib数列
- 读《世界是数字的》读书笔记
- XMPP即时通信的效果图
- Groovy 之 Closure
- html5离线存储
- openstack