zoukankan      html  css  js  c++  java
  • LeetCode OJ:Add Binary(二进制相加)

    Given two binary strings, return their sum (also a binary string).

    For example,
    a = "11"
    b = "1"
    Return "100".

    简单的二进制相加而已,只不过传入的参数是字符串而已。为了方便,先将string  reverse了一下,代码如下:

     1 class Solution {
     2 public:
     3     string addBinary(string a, string b) {
     4         reverse(a.begin(), a.end());
     5         reverse(b.begin(), b.end());
     6         int len1 = a.length();
     7         int len2 = b.length();
     8         string result;
     9         int flag ,val;
    10         flag = val = 0;
    11         int i;
    12         for(i = 0; i < len1 && i < len2; ++i){
    13             val = (a[i] - '0') + (b[i] - '0') + flag;
    14             result.append(1, val % 2 + '0');
    15             flag = val/2;
    16         }
    17         while (i < len1) {
    18             val = a[i] - '0'+ flag;
    19             result.append(1, val % 2 + '0');
    20             flag = val/2;
    21             ++i;
    22         }
    23         while (i < len2 ){
    24             val = b[i] - '0'+ flag;
    25             result.append(1, val % 2 + '0');
    26             flag = val/2;
    27             ++i;
    28         }
    29         cout << "flag " << flag << endl;
    30         if(flag != 0)
    31             result.append(1, '1');
    32         reverse(result.begin(), result.end());
    33         return result;
    34     }
    35 };

     java:以前的循环用的好蠢啊,居然用了三次循环,下面的java稍微有些改进:

     1 public class Solution {
     2     public String addBinary(String a, String b) {
     3         int len1 = a.length();
     4         int len2 = b.length();
     5         String ret = new String();
     6         int i = 0;
     7         int carry = 0;
     8         a = ReverseStr(a);
     9         b = ReverseStr(b);
    10         while(i < len1 || i < len2 || carry != 0){
    11             int val = ((i<len1)?(a.charAt(i)-'0'):0) + ((i<len2)?(b.charAt(i)-'0'):0) + carry;
    12             carry = 0;
    13             if(val > 1){
    14                 carry = val/2;
    15                 ret += (char)((val%2) + '0');
    16             }else{
    17                 ret += (char)(val + '0');
    18             }
    19             i++;
    20         }
    21         return ReverseStr(ret);
    22     }
    23 
    24        public String ReverseStr(String str){
    25         return new StringBuffer(str).reverse().toString();
    26     }
    27 }
  • 相关阅读:
    Saiku相关异常处理(十五)
    Saiku登录源码追踪.(十三)
    Saiku调用WS接口(十四)
    Saiku本地编译运行后Debug调试(十二)
    Windows查看Java内存使用情况
    Saiku免登录嵌入其他系统使用(十一)
    Saiku更改源代码实现默认查询一天的数据(十)
    Saiku关于MDX过滤的使用-默认显示最近一周的数据(九)
    Saiku部分函数解析(八)
    Saiku缓存处理(七)
  • 原文地址:https://www.cnblogs.com/-wang-cheng/p/4870243.html
Copyright © 2011-2022 走看看