首页 > 学院 > 开发设计 > 正文

用字符串模拟两个大数相加——java实现

2019-11-14 15:19:58
字体:
来源:转载
供稿:网友

问题:

  大数相加不能直接使用基本的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

 

 

  致谢:感谢您的阅读!

 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表