二进制相加 怎么用java实现

2025-04-02 23:15:48
推荐回答(2个)
回答1:

两个数相加,会得到一个结果,和一个进位的结果,
然后将这个进位的结果后面加0补位,然后再和这个结果相加。如此递归,知道进位全部是0为
public class $ {
public static void main(String[] args) {

String s0 = "100";// 十进制4

StringBuffer result = new StringBuffer();
StringBuffer jinwei = new StringBuffer();

System.out.println(test(result, jinwei, ));
}

private static String test(StringBuffer result, StringBuffer jinwei, String s0, String {

// 没有进位了就退出
if (s0.length() > 0 && s0.indexOf("1") < 0) {
return s1;
}
//位数补齐
int len0 = s0.length();
int len1 = s1.length();

int minLen = Math.max(len0, len1);

s0 = buqi(len0, minLen) + s0;
s1 = buqi(len1, minLen) + s1;

for (int i = s0.length() - 1; i >= 0; i--) {
String str0 = s0.substring(i, i + 1);
String str1 = s1.substring(i, i + 1);
add(result, jinwei, str0, str1);
}

String tmpJinwei = jinwei.reverse().toString() + "0";
jinwei.delete(0, jinwei.length());

String tmpResult = result.reverse().toString();
result.delete(0, result.length());

return test(result, jinwei, tmpJinwei, tmpResult);
}

private static void add(StringBuffer result, StringBuffer jinwei, String str0, String str1) {

// 00相加为0,不进位
if ("0".equals(str0) && "0".equals(str1)) {
result.append("0");
jinwei.append("0");
return;
}

// 11相加为0,进位1
if ("1".equals(str0) && "1".equals(str1)) {
result.append("0");
jinwei.append("1");
return;
}

// 其他情况,相加为1,不进位
result.append("1");
jinwei.append("0");
}

private static String buqi(int len0, int minLen) {
String tmp = "";
for (int i = len0; i < minLen; i++) {
tmp += "0";
}
return tmp;
}
}

回答2:

有个思路:写三个函数,2的几次方函数,二进制转十进制函数,十进制转二进制函数;再利用字符串转数字,就可以吧二进制加减变为一般的加减法,再转会二进制...