zoukankan      html  css  js  c++  java
  • 二进制加法

    群里有人发:

    public static boolean[] BiAdd(boolean[] A, boolean[] B) {
    2 boolean[] mResult = null;
    3 int i;
    4 boolean mAcc = false;
    5 if (A.length != B.length) {
    6 return null;
    7 }
    8 mResult = new boolean[A.length + 1];
    9 for (i = mResult.length - 1; i > 0; --i) { //******
    10 mResult[i] = B[i - 1] ^ mAcc;
    11 if (A[i - 1]) {
    12 mResult[i] = !mResult[i];
    13 mAcc = B[i - 1] | mAcc;
    14 } else {
    15 mAcc = B[i - 1] & mAcc;
    16 }
    17 }
    18 mResult[0] = mAcc;
    19 return mResult;
    20 }

    是一个二进制的加法运算,他想把for内部的代码简化。

    我倒是想了,可惜不知道还有更好,不过让我自己写吧,我就写了下面这样一个:

    function bi_add($A, $B){
    //adjust the length of two binary array
    ($a_len = count($A)) > ($b_len = count($B)) ? ($B = array_pad($B, -$a_len, 0)) : ($A = array_pad($A, -$b_len, 0));
    $C = array_fill(0, count($A) + 1, 0);
    for($i = count($C) - 1; $i > 0 ; $i--){
    $tmp = 2 - ($C[$i] + $A[$i - 1] + $B[$i - 1]);
    if($tmp <= 0){//if has carry
    $C[$i - 1] = 1;
    }
    $C[$i] = abs($tmp) % 2;//get 0 or 1
    }
    return $C;
    }
    $A = array(1,1);
    $B = array(0,1,0,1);
    echo implode("", $A)."<br />";
    echo implode("", $B)."<br />";
    echo implode("", bi_add($A, $B))."<br />";

    倒是发到了群里,一个名叫“佳南”人开话了,说“这种没有IQ的代码就别贴出来了”,是啊,弱暴了的代码,那我虚心求教啊,求一个化简代码,结果当然无答。发现这世上高手真是多!多得只会鄙视,不会解答。我当然承认自己非主流的代码,比起什么纯逻辑操作看起来,要“没技术含量”得多,哎,也是感叹

  • 相关阅读:
    使用闭包的注意点
    JS中的回收机制
    jQuery选择器之样式
    PNRPC 2017-2018 Gym101615I
    Verilog碎碎念
    Codeforces 420D. Cup Trick
    AGC017C. Snuke and Spells
    XVII Open Cup named after E.V. Pankratiev. GP of Tatarstan B. White Triangle
    SPOJ TETRIS2D
    AGC017B. Moderate Differences
  • 原文地址:https://www.cnblogs.com/ppoo24/p/2109204.html
Copyright © 2011-2022 走看看