Java利用字符串实现整数格式相加求和

/**
* @description 不适用int,long,float,double,BigDecimal进行数据相加
* 字符串保存长度超过Java基本类型中数字的保存长度值
* @开心农场
*/
public class StringSum {
public static void main(String[] args) {
String a = “123456789”;
String b = “987654321”;
System.out.println(sum(a, b));
}

public static String sum(String aNum, String bNum) {
    // 字符串翻转
    String n1 = new StringBuffer(aNum).reverse().toString();
    String n2 = new StringBuffer(bNum).reverse().toString();
    int len = 0;
    int aLen = aNum.length();
    int bLen = bNum.length();
    // 获取最长字符串的长度
    len = (aLen >= bLen) ? aLen : bLen;
    //判断是否溢出
    boolean overFlow = false;
    int nTakeOver = 0;
    // 短字符串高位补0
    if (aLen < bLen) {
        for (int i = aLen; i < bLen; i++) {
            n1 += "0";
        }
    } else {
        for (int i = bLen; i < aLen; i++) {
            n2 += "0";
        }
    }
    //保存计算结果
    StringBuffer buffer = new StringBuffer();
    int bwInt = 0;
    for (int i = 0; i < len; i++) {
        int result = Integer.parseInt(n1.charAt(i) + "") + Integer.parseInt(n2.charAt(i)+ "");
        result += bwInt;
        //当前计算结果数字是否大于10
        if (result >= 10) {
            //最高位大于10则 在向高位借1
            if (i == len - 1) {
                overFlow = true;
                //定义借位后高位数字为1
                nTakeOver = 1;
            }
            //两数相加,如果大于10则获取十位数结果值
            bwInt = result/10;
            //当前位置添加个位数
            buffer.append(result % 10);
        } else {
            buffer.append(result);
            //没有上位则十位数为0
            bwInt = 0;
        }
    }
    //高位加1
    if (overFlow) {
        buffer.append(nTakeOver);
    }
    return buffer.reverse().toString();
}

}

你可能感兴趣的:(Java正则表达式)