首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

50分求一算法解决思路

2012-03-11 
50分求一算法有一个值,如127,1271+2+4+8+16+32+64//后面的一个数等于前面数*251+4//中间的2有可能断层,

50分求一算法
有一个值,如127,
127=1+2+4+8+16+32+64 //后面的一个数等于前面数*2
5=1+4 //中间的2有可能断层,复选框未选中
我怎样才能算出这个数是有哪些这样的数字相加的,1,2,4,8,16,32,64或1,4

[解决办法]
转成2进制就很容易了!
[解决办法]
public static void main(String[] args) {
//System.out.println(sum(100));

int a = 10;
String print;
int b=a;
int count = 0;
int time = 0;
int i = -1;
int[] times = new int[100];
while (a > 1) {
if (a % 2 > 0) {
count += 2 >> time;
a++;
times[++i] = time;
}

a = a / 2;
time++;
}
i = 1;
if (count == 0)
print = a + "=" + a;
else {
if (b % 2 > 0) {
print =b+ "=1";
for (int j = 0; j < time; j++)
if (j != times[i])
print += "+" + (2 << (j-1));
else if (i < times.length - 2)
i++;
print = print.replaceAll("0\\+","");
} else {
i = 1;
print = b+"=";
for (int k = 1; k < time; k++)
if (k != times[i]) {
System.out.println(k);
print += "+" + (2 << (k-1));
} else if (i < times.length - 2) {
i++;
}
print = print.replaceFirst("\\+","");
}
}

System.out.println(print);

}

热点排行