输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下: /** @param a = "1101" @param b = "1100" @return "11001" */ public String add(String a, String b){ }
输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下: /** @param a = "1101" @param b = "1100" @return "11001" */ public String add(String a, String b){ }
"1101","1100"
"11001"
class Solution { public: /** * 字符串相加 * @param str1 string字符串 第一个二进制数 * @param str2 string字符串 第二个二进制数 * @return string字符串 */ string solve(string str1, string str2) { // write code here string res = ""; int i = str1.size() - 1, j = str2.size() - 1, carry = 0; while (i >= 0 || j >= 0) { int num1 = i >= 0 ? str1[i--] - '0' : 0; int num2 = j >= 0 ? str2[j--] - '0' : 0; int sum = num1 + num2 + carry; res.insert(res.begin(), sum >= 2 ? 0 + '0' : sum + '0'); carry = sum >= 2 ? 1 : 0; } return carry ? "1" + res : res; } };
class Solution { public: /** * 字符串相加 * @param str1 string字符串 第一个二进制数 * @param str2 string字符串 第二个二进制数 * @return string字符串 */ string solve(string str1, string str2) { // write code here string temp; while(str1.length()!=str2.length()) { if(str1.length()<str2.length()) str1 = '0'+str1; else if(str1.length()>str2.length()) str2 = '0'+str2; } int flag=0; temp = str1; for(int i=0;i<str1.length();i++) { if((str1[str1.length()-i-1]-'0')+(str2[str2.length()-i-1]-'0'+flag)==2) { flag = 1; temp[str1.length()-i-1] = '0'; } else if((str1[str1.length()-i-1]-'0')+(str2[str2.length()-i-1]-'0'+flag)==1) { flag = 0; temp[str1.length()-i-1] = '1'; } else if((str1[str1.length()-i-1]-'0')+(str2[str2.length()-i-1]-'0'+flag)==0) { flag = 0; temp[str1.length()-i-1] = '0'; } } if(flag==1) { temp = '1'+temp; } return temp; } };