// 二进制开关标记算法 // 原理 00001010 = 2^1 + 2^3 = 10 表示1号和3号是开,其余是关 // 例如 星期1和星期3 闹钟才提醒 加密就得到10 ,解码就得到 1和3 // 用二进制标记当前是否显示;1表示显示,0表示不显示 // 例如: 标记的星期一至星期日那几天有闹钟提醒 // 传入 8 得到 3 表示星期3才提醒 // 传入 10 得到 3 1 表示星期1 和星期3 才提醒 static void MarkByBinary(int num) { int mi = num; while (num >= 1) { mi = (int) (Math.log(num) / Math.log(2)); num = (int) (num - Math.pow(2, mi)); System.out.println(mi);//输出 } } //---------------------完整算法演示-------------------// public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list = MarkDecodeByBinary(11); int sum = MarkCodeByBinary(list); System.out.println(); System.out.println(sum); } // 二进制开关标记算法_生成标记算法: // 用二进制标记当前是否显示;1表示显示,0表示不显示 // 例如,标记的是星期一至星期日 那几天有闹钟提醒 // 例如,传入3 1 得到 10 static int MarkCodeByBinary(ArrayList<Integer> list) { int sum = 0; for (int i : list) { sum += (int) Math.pow(2, i); } return sum; } // 二进制开关标记算法_解码标记算法: // 用二进制标记当前是否显示;1表示显示,0表示不显示 // 例如标记的是星期一至星期日 那几天有闹钟提醒 // 例如,传入 8 得到 3 表示星期3才提醒 // 例如,传入 10 得到 3 1 表示星期1 和星期3 才提醒 static ArrayList<Integer> MarkDecodeByBinary(int num) { int mi = num; ArrayList<Integer> list = new ArrayList<Integer>(); while (num >= 1) { mi = (int) (Math.log(num) / Math.log(2)); num = (int) (num - Math.pow(2, mi)); System.out.println(mi);// 输出 list.add(mi); } return list; }
二进制开关标记算法
猜你喜欢
转载自zheyiw.iteye.com/blog/1745115
今日推荐
周排行