用字符串模拟两个大数相加——java实现详解编程语言

问题:

  大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。

思路:

    1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加;

            2.对齐两个字符串,即短字符串的高位用‘0’补齐,便于后面的相加;

            3.把两个正整数相加,一位一位的加并加上进位。

具体代码如下:

 /** 
     * 用字符串模拟两个大数相加 
     * @param n1 加数1 
     * @param n2 加数2 
     * @return   相加结果 
     */ 
    public static String add2(String n1,String n2) 
    { 
    StringBuffer result = new StringBuffer(); 
 
    //1、反转字符串 
    n1 = new StringBuffer(n1).reverse().toString();     
    n2 = new StringBuffer(n2).reverse().toString(); 
     
    int len1 = n1.length(); 
    int len2 = n1.length(); 
    int maxLen = len1 > len2 ? len1 : len2; 
    boolean nOverFlow = false; //是否越界 
    int nTakeOver = 0 ; //溢出数量 
     
    //2.把两个字符串补齐,即短字符串的高位用0补齐 
    if(len1 < len2) 
    { 
        for(int i = len1 ; i < len2 ; i++) 
        { 
        n1 += "0"; 
        } 
    } 
    else if (len1 > len2) 
    { 
        for(int i = len2 ; i < len1 ; i++) 
        { 
        n2 += "0"; 
        } 
    } 
     
    //3.把两个正整数相加,一位一位的加并加上进位 
    for(int i = 0 ; i < maxLen ; i++) 
    { 
        int nSum = Integer.parseInt(n1.charAt(i) +"") + Integer.parseInt(n2.charAt(i) +""); 
         
        if(nSum >= 10) 
        { 
        if(i == (maxLen - 1)) 
        { 
            nOverFlow  = true; 
        } 
        nTakeOver = 1; 
        result.append(nSum - 10); 
        } 
        else 
        { 
        nTakeOver = 0; 
        result.append(nSum); 
        } 
    } 
     
    //如果溢出的话表示位增加了 
    if(nOverFlow) 
    { 
        result.append(nTakeOver); 
    } 
    return result.reverse().toString(); 
    }

 

测试:

 public static void main(String[] args)  
    { 
    String str = add2("911","222"); 
    System.out.println(str); 
    }

 

结果:

1133

 

 

  致谢:感谢您的阅读!

 

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/15133.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论