/**
* User: ldj
* Date: 2023/3/4
* Time: 11:38
* Description: 找出最接近某个数最近2的n次方
*/
public class SquareDemo {
public static void main(String[] args) {
System.out.println(Square.test1(2));
System.out.println(Square.test2(10));
System.out.println(Square.test3(12));
}
static class Square {
private static boolean flag = true;
//方法1
public static Integer test1(Integer num) {
if (num < 2) {
System.out.println("请输入一个不小于2的正整数");
return -1;
}
int result = 1;
while (flag) {
result = result * 2;
if (result == num) {
flag = false;
return result;
} else if (result > num) {
flag = false;
}
}
return result / 2;
}
//方法2
public static Integer test2(Integer num) {
if (num < 2) {
System.out.println("请输入一个不小于2的正整数");
return -1;
}
//十进制转成二进制数
String str = Integer.toString(num, 2);
int index = str.indexOf('1');
//从右往左数第最后出现'1'的位置 (例子:01010 n==4)
int n = str.length() - index;
//最接近但小于或等于num 的2^m方数为2^(n-1)
int result = 1;
for (int i = 1; i <= n - 1; i++) {
result = result * 2;
}
return result;
}
//方法2优化 (推荐)
public static String test3(Integer num) {
if (num < 2) {
return "请输入一个不小于2的正整数";
}
//十进制转成二进制数
String str = Integer.toString(num, 2);
int index = str.indexOf('1');
//从右往左数最后出现'1'的位置 (例子:01010 n==4)
int n = str.length() - index;
//最接近但小于或等于num 的2^m方数为2^(n-1)
return "2^"+(n-1);
}
}
}
找出最接近某个数最近2的n次方数
于 2023-03-04 13:21:23 首次发布