public static String addBinary(String a,String b)
{
/**
* carry为进位标志
* sum为每一位的和
*/
int carry = 0,sum = 0,opa = 0,opb = 0;
StringBuilder result = new StringBuilder();
/**
* 补全0需要从前面补,因此需要将原字符串进行反转
*/
StringBuilder b01 = new StringBuilder(a);
a = b01.reverse().toString();
StringBuilder b02 = new StringBuilder(b);
b = b02.reverse().toString();
while (a.length() != b.length())
{
if (a.length() < b.length())
{
a += "0";
} else
{
b += "0";
}
}
StringBuilder b1 = new StringBuilder(a);
StringBuilder b2 = new StringBuilder(b);
a = b1.reverse().toString();
b = b2.reverse().toString();
for (int i = a.length() - 1; i >= 0; --i)
{
opa = a.charAt(i) - '0';
opb = b.charAt(i) - '0';
sum = opa + opb + carry; //每一位进行加法需要加上进位
if (sum >= 2)
{
result.append((char)(sum - 2 + '0'));
carry = 1; //当前位相加大于1需要进位
}else
{
result.append((char)(sum + '0'));
carry = 0;
}
}
if (carry == 1) //进位为1前面加1
{
result.append('1');
}
return result.reverse().toString();
}
public static String transform(String x,int d)
{
int anInt = Integer.parseInt(x);
int s = anInt,i = -1;
Stack<Integer> stack = new Stack<>();
if (s < 0)
s = -s;
if (s == 0 || d < 2)
return x;
while (s != 0)
{
stack.push(s % d);
s /= d;
}
StringBuilder builder = new StringBuilder();
while (!stack.empty())
{
builder.append(stack.pop());
}
return builder.toString();
}