Given two binary strings, return their sum (also a binary string).
For example,
a = “11” b = “1” Return “100”.二进制相加,类同与字符串相加
#include#include 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#include 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;}
如有错误,欢迎指正,谢谢!