Java算法,在线等,回答正确追加满分

来源:百度知道 编辑:UC知道 时间:2024/09/20 11:52:29
问个问题,算法问题,给你一个数值,例如:12,那么,12=2的2次方+2的3次方,此时返回包含2和3的集合,再如,计算49,返回,0,4,5,因为49=2的0次方+2的4次方+2的5次方,就是说返回的值都是以2为底的幂数,这个怎么做呀,要求用java实现,谢谢。
Math.scalb(2, n);
貌似没有这个方法。

import java.util.ArrayList;
import java.util.List;

public class ScalbAll {

public static void main(String[] args) {
int result = 49;
List als = new ArrayList();
int n = 0;
while (true) {
double d = Math.scalb(2, n);
if (d > result) {
als.add(n + "");
result = result - (int) Math.scalb(2, n - 1);
n = 0;
} else {
n++;
}
if (result <= 0) {
break;
}
}
for (int i = als.size() - 1; i >= 0; i--) {
System.out.println(als.get(i));
}
}
}

楼上朋友的思路很有意思,我也实现了
List als = new ArrayList();
String str = Integer.toBinaryString(49);
int length = str.length();
for (int i = 0; i < length; i++) {
String tmp = str.substring(i, i + 1);
if ("1".equals(tmp)) {
als.add("" + (length - i - 1));
}
}
for (int i = als.size() - 1; i >= 0; i--) {