• 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;
    }

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

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

  • 相关阅读:
    进阶篇-用户界面:10.点九切图法在androidUI中的使用
    进阶篇-用户界面:9.android动画-布局动画
    进阶篇-用户界面:8.android动画-动画侦听和自定义动画
    20162309《程序设计与数据结构》第二学期课程总结
    规格说明书
    团队开发项目实验报告
    Dijkstra算法课后补分博客
    图的深度优先遍历课后补分博客
    图的广度优先遍历课下补分博客
    20162309《程序设计与设计结构》第四次实验报告
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779751.html
Copyright © 2020-2023  润新知