美文网首页
二进制开关标记算法

二进制开关标记算法

作者: 安易学车 | 来源:发表于2018-07-31 10:21 被阅读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;  

        }  

    相关文章

      网友评论

          本文标题:二进制开关标记算法

          本文链接:https://www.haomeiwen.com/subject/lzycvftx.html