简单的输出一个从二进制来看,比输入数据大的第一个数字。
思路:
1.从最后一位开始扫描,扫猫到第一个1之后,从这个1开始往前进位,直到不能进位为止(期间把进位路上经过的位置0)。
2.进位之后,统计除了高位上直到刚刚进上的位,还缺少几个1,就在最后几位填充相应位数的1即可。
java code:
import java.util.Scanner; public class Main { public static void main(String ss[]) { Scanner cin = new Scanner(System.in); int num = cin.nextInt(); while (num != 0) { String bin = Integer.toBinaryString(num); char[] bins = bin.toCharArray(); int k1 = count(bins);// 记录最初1的个数 // 找到最后的一个1,然后依次往前进一位,直到不能进位,然后在最后面补上相应个数个1即可 int index = bins.length - 1; while (index != -1) { if (bins[index] == '1') { break; } index--; } // 往前进位 boolean flag = true; while (flag && (index) != -1) { if (index >= 0) { if (bins[index] == '0') { bins[index] = '1'; break; } else { bins[index] = '0'; if (index == 0) {// 如果已经是第一位了,那么扩充一位,扩充的这位是1 bins = expand(bins); } flag = true; index--; } } } // 进位之后,在最后加上相应个数个1 int k2 = count(bins); int m = bins.length - 1; for (int i = 0; i < (k1 - k2); i++) { bins[m] = '1'; m--; } System.out.println(Integer.parseInt(new String(bins), 2)); num = cin.nextInt(); } } public static char[] expand(char[] cs) { char[] bins = new char[cs.length + 1]; bins[0] = '1'; for (int i = 1; i <= cs.length; i++) { bins[i] = cs[i - 1]; } return bins; } // 统计char数组中1的个数 public static int count(char[] cs) { int num = 0; for (int i = 0; i < cs.length; i++) if (cs[i] == '1') num++; return num; } }