zoukankan      html  css  js  c++  java
  • 进制-Adding Two Negabinary Numbers

    2020-02-20 14:52:41

    问题描述:

    问题求解:

    最开始的想法是将两个数字先转化成自然数在求和,最后转化回去,但是实际上这种方案是不可取的,主要的问题就是会爆掉。

    那么就得按位进行运算了。

    进行位运算的时候最大的难点在于进位怎么获得。

    显然,当sum = 0 / 1的时候,carry = 0;

    当sum > 1的时候,carry = -1;

    当sum < 0的时候,carry = 1;

    sum = 0 -> carry = 0, result = 0

    sum = 1 -> carry = 0, result = 1

    sum = 2 -> carry = -1, result = 0

    sum = 3 -> carry = -1, result = 1

    sum = -1 -> carry = 1, result = 1

        public int[] addNegabinary(int[] arr1, int[] arr2) {
            List<Integer> res = new ArrayList<>();
            int len1 = arr1.length;
            int len2 = arr2.length;
            int carry = 0;
            for (int i = 0; i < Math.max(len1, len2) || carry != 0; i++) {
                int d1 = i < len1 ? arr1[len1 - 1 - i] : 0;
                int d2 = i < len2 ? arr2[len2 - 1 - i] : 0;
                int sum = d1 + d2 + carry;
                res.add(Math.abs(sum) % 2);
                if (sum > 1) carry = -1;
                else if (sum < 0) carry = 1;
                else carry = 0;
            }
            int idx = res.size() - 1;
            while (idx >= 1) {
                if (res.get(idx) == 0) idx -= 1;
                else break;
            }
            int[] nums = new int[idx + 1];
            while (idx >= 0) {
                nums[nums.length - 1 - idx] = res.get(idx--);
            }
            return nums;
        }
    

      

  • 相关阅读:
    sshd服务(使用ssh协议远程开启其他主机shell的服务)
    centos 端口及防火墙
    Linux系统常用指令积累
    Vue插值
    Vue生命周期钩子
    WinForm常用窗体属性及控件
    SQL Server 如何设置某列自增
    .mdf和.ldf文件导入SQL server 数据库
    .netCoreApi 定时任务
    c# web请求
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12335713.html
Copyright © 2011-2022 走看看