青训营X豆包MarsCode 二进制反码转换问题|豆包MarsCode AI刷题

84 阅读2分钟

题目

小C在学习二进制运算,他了解到每个非负整数都有其二进制表示。例如,整数 5 可以被表示为二进制 "101",整数 11 可以被表示为二进制 "1011",并且除了 N = 0 外,任何二进制表示中都不含前导零。

二进制的反码表示是将每个 1 变为 0,每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"。现在小C想知道,给定一个十进制数 N,它的二进制反码对应的十进制数是多少

代码


    public static int solution(int N) {

        // write code here

        String s=Integer.toBinaryString(N);

        char[] ss=s.toCharArray();

        int[] a=new int[ss.length];

        int result=0;

        int count=0;

        //反码

        for(int i=0;i<ss.length;i++){

            if(ss[i]=='0')ss[i]='1';

            else ss[i]='0';

        }

        for (int i = 0; i < ss.length; i++) {

            a[i] = Character.getNumericValue(ss[i]);

        }

        for(int i=ss.length-1;i>=0;i--){

            result+=Math.pow(2, count)*a[i];

            count++;

  


        }

  


        return result; // Placeholder return

    }

  


    public static void main(String[] args) {

        System.out.println(solution(5) == 2 ? 1 : 0);

        System.out.println(solution(10) == 5 ? 1 : 0);

        System.out.println(solution(0) == 1 ? 1 : 0);

    }

}

解析

1.分析题目

看到题目后,我们首先要分析题目要解决什么样的问题,用户输入格式通过什么样的算法能拿到正确的输出结果,在这个问题中,可以看到,输入一个十进制数字,要求输出该数字二进制反码的十进制形式,那么我们首先需要将该十进制数字转换为二进制形式,再求出该二进制的反码,最后将二进制反码转换为十进制数字输出。

2.解决问题

首先我们可以通过Integer.toBinaryString将十进制转换为二进制字符串,在反码转换中,我们需要将二进制字符串转换为字符数组,遍历数组的每一个元素,将其转换得到反码字符数组,再将二进制转换为十进制时,我这里是将字符数组转换为整型数组,再根据二进制转十进制规则,通过一个循环遍历数组每个元素,去实现该步骤。大家如果有更好的方式可以分享分享哦。

3.易错

在最后二进制转换十进制这部分代码中,要注意循环变量i和计算十进制时2的次方数之间的关系以及二进制数组下标,我一开始习惯性将i设为从0到数组长度这样去遍历,忽略了这点,在这一步一定要分析好各个变量之间的关系,以及二进制转十进制正确的计算过程。