一个应该是简单的算法吧,有人知道是怎么做的吗?

忽而今夏1104 2014-03-28 12:12:56
看一个人写的算法

大概是 1 , 2, 4.....................这些数字,好像都是2的x次方.然后有一个数比如是5 他就能知道是1 | 4;我不知道他是怎么做到的.
我怎么根据一个数字就知道他是哪几个数字的组合呢?
...全文
163 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mich_LY 2014-03-28
  • 打赏
  • 举报
回复
...不就是十进制转2进制么
  • 打赏
  • 举报
回复
引用 1 楼 FishOfThink 的回复:
可以用贪心法求解。 首先设要求解的数为N 在集合中,找到小于N的最大的数M ,将N分解为M 与N-M两部分。 再在集合中,找到小于N-M的最大的数。 重复以上过程直到找到最终解 例如,现有一个数字11 找到集合中小于11的最大的数(该数一定是2的N次方),得到8,剩余数字为3 再找到小于3的最大的数,得到2,剩余数字为1. 1本身也是2的N次方中的一个数,所以查找结束。 最后结果为 11 = 1 | 2 | 8
正解!!!!
老猿的书房 2014-03-28
  • 打赏
  • 举报
回复
可以用贪心法求解。 首先设要求解的数为N 在集合中,找到小于N的最大的数M ,将N分解为M 与N-M两部分。 再在集合中,找到小于N-M的最大的数。 重复以上过程直到找到最终解 例如,现有一个数字11 找到集合中小于11的最大的数(该数一定是2的N次方),得到8,剩余数字为3 再找到小于3的最大的数,得到2,剩余数字为1. 1本身也是2的N次方中的一个数,所以查找结束。 最后结果为 11 = 1 | 2 | 8
Mich_LY 2014-03-28
  • 打赏
  • 举报
回复
public static void cal(int num) {
		StringBuilder binary = new StringBuilder(Integer.toBinaryString(num));
		binary = binary.reverse();
		int value = 1;
		for (int i = 0; i < binary.length(); i++) {
			char c = binary.charAt(i);
			if (c == '1') {
				System.out.print(value + " ");
			}
			value <<= 1;
		}
	}
忽而今夏1104 2014-03-28
  • 打赏
  • 举报
回复
java怎么写?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧