|
| 1 | +#coding: utf-8 |
| 2 | +''' mbinary |
| 3 | +####################################################################### |
| 4 | +# File : addNegaBin.py |
| 5 | +# Author: mbinary |
| 6 | +# Mail: zhuheqin1@gmail.com |
| 7 | +# Blog: https://mbinary.xyz |
| 8 | +# Github: https://github.com/mbinary |
| 9 | +# Created Time: 2019-06-02 22:32 |
| 10 | +# Description: |
| 11 | +
|
| 12 | +给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。 |
| 13 | +
|
| 14 | +数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。例如,arr = [1,1,0,1] 表示数字 (-2)^3 + (-2)^2 + (-2)^0 = -3。数组形式 的数字也同样不含前导零:以 arr 为例,这意味着要么 arr == [0],要么 arr[0] == 1。 |
| 15 | +
|
| 16 | +返回相同表示形式的 arr1 和 arr2 相加的结果。两数的表示形式为:不含前导零、由若干 0 和 1 组成的数组。 |
| 17 | +
|
| 18 | +eg |
| 19 | +输入:arr1 = [1,1,1,1,1], arr2 = [1,0,1] |
| 20 | +输出:[1,0,0,0,0] |
| 21 | +解释:arr1 表示 11,arr2 表示 5,输出表示 16 |
| 22 | +####################################################################### |
| 23 | +''' |
| 24 | +from nega import nega |
| 25 | + |
| 26 | +def addNegaBin(arr1: list, arr2: list) -> list: |
| 27 | + if len(arr1) < len(arr2): |
| 28 | + arr1, arr2 = arr2, arr1 |
| 29 | + for i in range(-1, -len(arr2) - 1, -1): |
| 30 | + if arr1[i] == 1 and arr2[i] == 1: |
| 31 | + arr1[i] = 0 |
| 32 | + mux = 0 |
| 33 | + for j in range(i - 1, -len(arr1) - 1, -1): |
| 34 | + if arr1[j] == mux: |
| 35 | + mux = 1 - mux |
| 36 | + arr1[j] = mux |
| 37 | + else: |
| 38 | + arr1[j] = mux |
| 39 | + break |
| 40 | + else: |
| 41 | + arr1 = [1, 1] + arr1 |
| 42 | + |
| 43 | + elif arr1[i] == 0 and arr2[i] == 1: |
| 44 | + arr1[i] = arr2[i] |
| 45 | + #print(arr1,arr2,i) |
| 46 | + while len(arr1) > 1 and arr1[0] == 0: |
| 47 | + arr1.pop(0) |
| 48 | + return arr1 |
| 49 | + |
| 50 | +if __name__=='__main__': |
| 51 | + while 1: |
| 52 | + print("input q to quit or input x1 x2: ") |
| 53 | + s = input() |
| 54 | + if s=='q': |
| 55 | + break |
| 56 | + n1,n2 =[int(i) for i in s.split()] |
| 57 | + l1,l2 = nega(n1),nega(n2) |
| 58 | + print(n1,l1) |
| 59 | + print(n2,l2) |
| 60 | + print(f'{n1}+{n2}={n1+n2}: {addNegaBin(l1,l2)}') |
0 commit comments