展开全部
我这个算法不高,暂时想不到别的方法,你试试吧。
主要是模拟自然语言中的加法运算步32313133353236313431303231363533e4b893e5b19e31333332633665骤。
两个数相加,会得到一个结果,和一个进位的结果,
然后将这个进位的结果后面加0补位,然后再和这个结果相加。如此递归,知道进位全部是0为止public class $ {
public static void main(String[] args) {
String s0 = "100";// 十进制4
String s1 = "10100";// 十进制20
StringBuffer result = new StringBuffer();
StringBuffer jinwei = new StringBuffer();
System.out.println(test(result, jinwei, s0, s1));
}
private static String test(StringBuffer result, StringBuffer jinwei, String s0, String s1) {
// 没有进位了就退出
if (s0.length() > 0 && s0.indexOf("1")
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
tmp += "0";
}
return tmp;
}
}
结果011000