用java写一个两个任意长度字符串数字和的算法

package com.cn.test.string;

public class StringTest {
    public static void main(String[] args) {
       String str1 = getStringSum("999999999999999999999999999999999999999999999999999999999999999999999999999999","911911111111111111111111111111111111111111111111111111119999999999");
       System.out.println(str1);
    }
    
    public static String getStringSum(String num1,String num2) {
        StringBuffer result = new StringBuffer();
        //反转字符串  123 --> 321  8912 --> 2198
        num1 = new StringBuffer(num1).reverse().toString(); 
        num2 = new StringBuffer(num2).reverse().toString(); 
        int len1 = num1.length();
        int len2 = num2.length();
        int maxLen = len1 > len2 ? len1 : len2;
        int nTakeOver = 0 ; //进位
        //2.把两个字符串补齐,即短字符串的高位用0补齐
        if(len1 < len2){  // 3210
            for(int i = len1;i < len2; i++) {
                num1 += "0";
            }
        } else if (len1 > len2){
            for(int i = len2 ; i < len1 ; i++)
            {
                num2 += "0";
            }
        }
        System.out.println(num1);
        System.out.println(num2);
        //3.逐位相加  3210 2198  
        for(int i=0; i<maxLen; i++) {
            int nSum = Integer.parseInt(num1.charAt(i) +"") + Integer.parseInt(num2.charAt(i) +"")+ nTakeOver;
            nTakeOver = 0;
            System.out.println("maxLen:"+maxLen);
            if(i < (maxLen - 1)) {
                if(nSum >= 10) { 
                    nTakeOver = 1;
                    result.append(nSum - 10);
                }else {
                    nTakeOver = 0;
                    result.append(nSum);
                }
            }else {
                StringBuffer lastSum = new StringBuffer();
                //最后一位数的加法特殊处理,先反转
                lastSum.append(nSum).reverse();
                result.append(lastSum);
                result.reverse().toString();
            }
        }
        return result.toString();
    }
}

 

posted @ 2018-07-17 14:48  搬砖真累  阅读(2024)  评论(0编辑  收藏  举报