描述:
写一个方法,将两个二进制的字符串的和以字符串的形式返回
注意:不可将二进制转化成十进制,返回的值不能以“0”开头
例如:
add(‘111’,’10’); => ‘1001’
add(‘1101’,’101’); => ‘10010’
add(‘1101’,’10111’) => ‘100100’
CodeWar:
using System;
using System.Text;
public class BinaryNumbers
{
public static string Add(string a, string b)
{
if(!a.Contains("1") && !b.Contains("1")) return "0";//若两个字符串都不包含1,则返回0
int length = a.Length > b.Length ? a.Length : b.Length;//返回较长字符串的长度
int carry = 0;//声明一个携带值,用于逢2进1
StringBuilder sb = new StringBuilder();
//为了使运算在同个循环里,所以将两个字符串的长度统一,用PadLeft方法将两个字符串的左侧填充"0"到长度为length为止
a = a.PadLeft(length, '0');
b = b.PadLeft(length, '0');
for(int i=length-1;i>=0;i--)
{
string str = "0";
int sum = 0;
int item1 = int.Parse(a[i].ToString());
int item2 = int.Parse(b[i].ToString());
sum = item1 + item2 + carry;
carry = 0;
if(sum == 3)
{
carry = 1;
str = "1";
}
else if(sum == 2)
{
carry = 1;
str = "0";
}
else if(sum == 1) str = "1";
sb.Insert(0, str);
}
if(carry == 1) sb.Insert(0, "1");
return sb.ToString().TrimStart('0');
}
}