OR106. 字符串加法
描述
输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**
* @param a = "1101"
* @param b = "1100"
* @return "11001"
*/
public String add(String a, String b){ }
输入描述
输入两个字符串,如"1101", "1100"输出描述
"11001"示例1
输入:
1101 1100
输出:
11001
示例2
输入:
0 1
输出:
1
C++ 解法, 执行用时: 3ms, 内存消耗: 304KB, 提交时间: 2021-03-21
#include<bits/stdc++.h> using namespace std; string add(string &a, string &b) { string res; reverse(a.begin(), a.end() ); reverse(b.begin() , b.end() ); int size = max(a.size() , b.size()); int t=0; for(int i=0;i<size;++i) { if (i< a.size()) t+= a[i]-'0'; if( i< b.size() ) t+= b[i] -'0'; res.push_back(t%2 +'0'); t/=2; } if(t) res.push_back('1'); reverse(res.begin() ,res.end() ); return res; } int main(void) { string x,y; cin>> x>>y ; cout << add(x,y) <<endl; return 0; }
C++14 解法, 执行用时: 3ms, 内存消耗: 304KB, 提交时间: 2020-07-25
#include <bits/stdc++.h> using namespace std; int main(){ string a, b, s=""; cin>>a>>b; int m = a.length(), n = b.length(); int c = 0; if(m>n) b = string(m-n, '0') + b; else a = string(n-m, '0') + a; for(int i=max(m,n)-1;i>=0;i--){ c += a[i]-'0' + b[i]-'0'; s = char((c&1)+'0') + s; c >>= 1; } if(c==1) s = '1' + s; cout<<s<<endl; return 0; }