1

我有一个十进制值65,我想将此值除以 2 以格式化。

例如,我有这个类型规则:

在此处输入图像描述

如果我得到42十进制数,我想先除42 number in format of 2 raised to。然后,我只想输出它的力量,比如:

OutPut : 1,3,5

在此处输入图像描述

例如,如果我有 65 作为十进制数,那么我想6,0作为它的输出,因为 (2 提高到 6) + (2 提高到 0) = 65。

谢谢

任何人都可以帮助我如何在 Java 中实现这一目标。

4

4 回答 4

4

您可以反复比较最低有效位,边走边算,然后右移数字以依次查看每个位:

int n = 65
int d = 0;
while (n > 0) {
    if ((n & 1) == 1) {  // check LSB
        System.out.println(d);
    }
    n >>>= 1;  // shift right
    ++d;       // inc digit count
}
于 2012-10-18T11:27:42.730 回答
2
Integer.toString(65, 2);

执行以下输出:

1000001

然后你在字符串上工作。

于 2012-10-18T11:24:30.637 回答
1

这可以改进,但我认为它会完成这项工作。

int n = 42;
    String binary = Integer.toBinaryString(n);
    for(int i = binary.length() - 1; i >= 0; i--){
        if(binary.charAt(i) == '1')
            System.out.print(i+1);      
    }
于 2012-10-18T11:25:08.227 回答
1

这是算法:

  1. 查找给定数字 x=log(2, input) 的对数底数 2
  2. 求结果 y = floor(x), z=ceiling(x) 的下限和上限
  3. 找到 2^y, 2^z 并选择更接近输入的那个。
  4. 计算 diff = (input - 2^(x or y)) 并递归地对 diff 执行相同的操作,直到 diff=0。
于 2012-10-18T11:27:26.757 回答