二进制开关标记算法

2018-07-31  本文已影响0人  安易学车

// 二进制开关标记算法  

// 原理 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 list =new ArrayList();  

list = MarkDecodeByBinary(11);  

int sum = MarkCodeByBinary(list);  

        System.out.println();  

        System.out.println(sum);  

    }  

// 二进制开关标记算法_生成标记算法:  

// 用二进制标记当前是否显示;1表示显示,0表示不显示  

// 例如,标记的是星期一至星期日 那几天有闹钟提醒  

// 例如,传入3 1 得到 10  

static int MarkCodeByBinary(ArrayList 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 MarkDecodeByBinary(int num) {  

int mi = num;  

ArrayList list =new ArrayList();  

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;  

    }  

上一篇 下一篇

猜你喜欢

热点阅读