Java实现二进制加法和十进制转任意进制(除16进制)

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();
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值