题解 | #牛群的编码#
牛群的编码
https://www.nowcoder.com/practice/fd18eec140244f31ac817757a54b4a39
知识点
字符串 高精度加法
思路
二进制加法与十进制加法的区别仅仅是进位的不同,所以我们可以沿用高精度加法的模板,具体思路类似于竖式。
首先判断那个字符串更长(数位右对齐),将它作为底,然后从两个字符串的末位开始相加并用t存储进位。当较短字符串的每一位都遍历完后,还要处理t与较长字符串剩余部分。在遍历完整个较长字符串以后,若t仍不为0,则需要补充前导进位,例如11+1=100,数位会增加一位。
代码c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param a string字符串
* @param b string字符串
* @return string字符串
*/
string add(string a, string b) {
int t = 0;
for (int i = b.size() - 1, j = a.size() - 1; i >= 0; i--, j--) {
if (b[i] - '0' + a[j] - '0' + t >= 2) {
a[j] = b[i] - '0' + a[j] - '0' + t-2+'0';
t = 1;
} else {
a[j] = a[j] - '0' + b[i] - '0' + '0' + t;
t = 0;
}
}
for (int i = a.size() - b.size()-1; i >= 0 && t >= 1; i--) {
if ( a[i] - '0' + t == 2) {
t = 1;
a[i] = '0';
} else {
a[i] = a[i] - '0' + t + '0';
t = 0;
}
}
string ans="1";
if(t!=0)
{
ans+=a;
return ans;
}
else return a;
}
string addBinary(string a, string b) {
// write code here
string ans ;
if (a.size() > b.size())return add(a, b);
else return add(b, a);
}
};```