悬赏问题都来回答!!!Java语言实现两个二进制数相加,不需要把结果转换为十进制数。二进制数最大100位

悬赏问题都来回答!!!Java语言实现两个二进制数相加,不需要把结果转换为十进制数。二进制数最大100位

完整的代码写给我看!

其实把~java有一个类叫:BigInteger,可以解决你的问题哦

因为是大整数类型,所以位数可以是无限大,只要内存装得下

下头是简单的示例代码:

import java.math.*;


/**
 * BitInteger
 */
public class BitInteger {

    public static void main(String[] args) {
        String bitStr1 = "0101000";
        String bitStr2 = "1010110";
        BigInteger a = new BigInteger(bitStr1, 2);
        BigInteger b = new BigInteger(bitStr2, 2);

        System.out.println("a+b as :" + a.toString() + "+" + b.toString() + "=" + a.add(b).toString());
        System.out.println("a+b as :" + a.toString(2) + "+" + b.toString(2) + "=" + a.add(b).toString(2));
    }
}

执行结果:

a+b as :40+86=126
a+b as :101000+1010110=1111110

最后:

数字相加无所谓进制,只是在于显示出来的时候是个什么样子,
所以二进制的 0101+0011 = 1000;

还是十进制的5+3 = 8;

实际上都是 5 个苹果加3个苹果 = 8个苹果,只是显示的形态不一致而已奥~~~

public static void main(String[] args) {
    System.out.println(add("1010","1"));            
}
public static String add(String a,String b){
    if (null ==a || null ==b) {
        return "null";
    }
    if (a.length() > 100 || b.length() > 100) {
        return "data too long";
    }
    StringBuilder sb=new StringBuilder();
    int x=0; 
    int y=0;
    int pre=0;
    int sum=0;
    while(a.length()!=b.length()){
        if(a.length()>b.length()){
            b="0"+b;
        }else{
            a="0"+a;
        }
    }
    for(int i=a.length()-1;i>=0;i--){
        x=a.charAt(i)-'0';
        y=b.charAt(i)-'0';
        sum=x+y+pre;
        if(sum>=2){
            pre=1;
            sb.append(sum-2);
        }else{
            pre=0;
            sb.append(sum);
        }
    }
    if(pre==1){
        sb.append("1");
    }
    return sb.reverse().toString();
}