在Java中添加二进制数

eblbsuwk  于 2023-01-16  发布在  Java
关注(0)|答案(4)|浏览(207)

我有一个函数,它把两个二进制数作为一个整数数组,把它们相加,然后把和作为一个新的整数数组返回。

public static int[] addBin(int a[], int b[]){
      int[] sum = {0, 0, 0, 0, 0, 0, 0, 0};
      int carryover = 0;
      int randombanana = 0;
      int x = 7;
      for(x = 7; x > 0; x--){
        randombanana = a[x] + a[x] + carryover;
        if(randombanana == 1){
          sum[x] = 1;
          carryover = 0;
        }
        else if(randombanana == 2){
          sum[x] = 0;
          carryover = 1;
        }
        else if(randombanana == 3){
          sum[x] = 1;
          carryover = 1;
        }
        else if(randombanana == 0){
          sum[x] = 0;
          carryover = 0;
        }
        else{
          System.out.println("Either I [censored] up, or you [censored] up.  I'm a genius so I'm going to assume you [censored] up");
        }
      }
          if(carryover == 1){
            sum[x] = 1;
      }
      return sum;
    }

该代码在一位数的数字上工作正常,包括需要携带一个数字的数字,但在两位数或三位数的数字上,当一个数字加到自己身上时,它工作正常,但当不同的多位数加在一起时,它就不工作了。

txu3uszq

txu3uszq1#

应该是

randombanana = a[x] + b[x] + carryover;
aiqt4smr

aiqt4smr2#

for循环没有处理第0位

for(x = 7; x >= 0; x--){
7gcisfzg

7gcisfzg3#

假设这两个数字的长度相同,则数字可以按如下方式相加:

public static int[] addNumbers(int[] firstNum, int[] secondNum) {
        int[] result = new int[firstNum.length + 1];
        int digitSum, carry = 0, i;
        for (i = firstNum.length - 1; i >= 0; i--) {
            digitSum = firstNum[i] + secondNum[i] + carry;
            result[i + 1] = digitSum % 2;
            carry = digitSum / 2;
        }
        result[0] = carry;
        return result;
    }
py49o6xq

py49o6xq4#

这里有一个简单明了的解决方案。

public static int [] addBinaryNumbers(int a[],int b[])
    {
        int n =Integer.max(a.length, b.length);
        int c[]=new int[n+1];
        int carry =0;
        for(int i=0;i<n;i++)
        {
            c[n-i]=(a[i]+b[i]+carry)%2;
            carry= (a[i]+b[i]+carry) /2;
        }
        c[n]=carry;
        return c;
    }

相关问题