• Add Binary -- leetcode


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

    For example,
    a = “11”
    b = “1”
    Return “100”.

    二进制相加,类同与字符串相加

    #include <iostream>
    #include <string>
    using namespace std;
    
    string addBinary(string a, string b) {
        int i = a.size() - 1;//字符串a的长度
        int j = b.size() - 1;//字符串a的长度
        int sum = 0;//当前位的和
        int temp = 0;//进位标志
        string ans;//结果字符串
        while (i >= 0 && j >= 0) {//从末位开始加操作
            sum = (a[i--] - '0') + (b[j--] - '0') + temp;
            temp = sum / 2;//求出进位
            sum %= 2;//求出当前位的值
            ans.insert(ans.begin(), sum + '0');//插入到字符串的最前面
        }
        //a字符串有剩余
        while (i >= 0) {
            int sum = (a[i--] - '0' + temp);
            ans.insert(ans.begin(), (sum % 2) + '0');
            temp = sum / 2;
        }
        //b字符串有剩余
        while (j >= 0) {
            int sum = (b[j--] - '0' + temp);
            ans.insert(ans.begin(), (sum % 2) + '0');
            temp = sum / 2;
        }
        //进位标示为1,再次进位
        if (temp == 1) {
            ans.insert(ans.begin(), (temp + '0'));
        }
        return ans;
    }
    
    int main() {
        string s;
        string s1;
        while (cin >> s >> s1) {
            cout << addBinary(s, s1) << endl;
        }
    
        system("pause");
        return 0;
    }

    扩展:任意进制(<=10)的字符串相加:

    #include <iostream>
    #include <string>
    using namespace std;
    
    string addStr(string a, string b, int num) {//num表示进位
        int i = a.size() - 1;//字符串a的长度
        int j = b.size() - 1;//字符串a的长度
        int sum = 0;//当前位的和
        int temp = 0;//进位标志
        string ans;//结果字符串
        while (i >= 0 && j >= 0) {//从末位开始加操作
            sum = (a[i--] - '0') + (b[j--] - '0') + temp;
            temp = sum / num;//求出进位
            sum %= num;//求出当前位的值
            ans.insert(ans.begin(), sum + '0');//插入到字符串的最前面
        }
        //a字符串有剩余
        while (i >= 0) {
            int sum = (a[i--] - '0' + temp);
            ans.insert(ans.begin(), (sum % num) + '0');
            temp = sum / num;
        }
        //b字符串有剩余
        while (j >= 0) {
            int sum = (b[j--] - '0' + temp);
            ans.insert(ans.begin(), (sum % num) + '0');
            temp = sum / num;
        }
        //进位标示为1,再次进位
        if (temp == 1) {
            ans.insert(ans.begin(), (temp + '0'));
        }
        return ans;
    }
    
    int main() {
        string s;
        string s1;
        int n;
        while (cin >> s >> s1) {
            cout << "请输入进制:";
            cin >> n;
            cout << addStr(s, s1, n) << endl;
            cout << "------" << endl;
        }
    
        system("pause");
        return 0;
    }

    这里写图片描述
    这里写图片描述

    如有错误,欢迎指正,谢谢!

  • 相关阅读:
    火星救援
    Android学习笔记(8)————详细谈谈intent的startActivityForResult()方法
    Android小技巧(二):为ContentProvider添加数据库事务支持
    Android小技巧(一):实现捕获应用的运行时异常
    理解Activity的生命周期
    Android异步处理四:AsyncTask的实现原理
    Android异步处理三:Handler+Looper+MessageQueue深入详解
    Android异步处理二:使用AsyncTask异步更新UI界面
    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
    Android APK反编译详解(附图)
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779751.html
Copyright © 2020-2023  润新知