问题:

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

  致谢:感谢您的阅读!

用字符串模拟两个大数相加——java实现的更多相关文章

  1. 两个大数相乘-Java

    两个字符串表示两个非常大的数,请设计算法计算这两个大数的乘积,结果用字符串表示.例如S1="7832974972840919321747983209327",S2="19 ...

  2. poj 1503 大数相加(java)

    代码: import java.math.*; import java.util.Scanner; public class Main { public static void main(String ...

  3. java-两个大数相加

    题目要求:用字符串模拟两个大数相加. 一.使用BigInteger类.BigDecimal类 public static void main(String[] args) { String a=&qu ...

  4. 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过

    杭电ACM(1002)大数相加 A + B Problem II Problem DescriptionI have a very simple problem for you. Given two ...

  5. POJ 1503 Integer Inquiry(大数相加,java)

    题目 我要开始练习一些java的简单编程了^v^ import java.io.*; import java.util.*; import java.math.*; public class Main ...

  6. 大数相加(类似杭电acm1002)

    /*输入两个非常大的整数(完全超出了int.long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果.*/ //自己用题目所给的案例测试,输出是正确的,也能输出正确的结果,不 ...

  7. 随机数组&amp;大数相加

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中 一,      设计思路: 先生成随机数数组,再将数组保存在一个字符串中,然后将数组各数字加和, ...

  8. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  9. [LeetCode] Add Two Numbers 两个数字相加

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

随机推荐

  1. 感悟 GNU C 以及将 Vim 打造成 C/C++ 的半自动化 IDE

    C 语言在 Linux 系统中的重要性自然是无与伦比.不可替代,所以我写 Linux 江湖系列不可能不提 C 语言.C 语言是我的启蒙语言,感谢 C 语言带领我进入了程序世界.虽然现在不靠它吃饭,但是 ...

  2. Windows Internals学习笔记(七)Image Loader

    参考资料: 1. <Windows Internals> 2. Fibers 知识点: ● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务.然而, ...

  3. C#获取字符首字母

    ///<summary> /// 获取字符首字母 /// </summary> public static string GetPyChar(string c) { if (s ...

  4. win7安装ubuntu后,进入不了win7

    方法一:进去ubuntu系统后,终端下输入如下命令:sudo update-grub,输入命令后,会提示寻找win7,ubuntu系统.并自动建立引导详情链接:http://zhidao.baidu. ...

  5. linux hadoop 集群安装步骤

    http://blog.csdn.net/xjavasunjava/article/details/12013677 1,时间同步hadoop集群的每台机器的时间不能相差太大. 安装集群前最好进行一下 ...

  6. Linux系统下rm删除文件后空间没有释放问题解决办法

    一.问题描述 今日收到zabbix监控报警,发现生产环境一台服务器的磁盘空间不足,需要进行处理,登录后发现可利用率不足20%,进行相关查看和处理工作:但是操作删除了一些备份文件和日志信息后,查看空间仍 ...

  7. (网页)angularJs中怎么模拟jQuery中的this?(转)

    转载自mini_fan博客园: 今天想在Angular项目中使用jQuery的this功能,发现undefined.代码如下: HTML部分: <p ng-click="testCli ...

  8. Python_copy_深浅拷贝

    对于数字和字符串来说,无论是‘’赋值‘’还是‘’深拷贝‘’还是‘’浅拷贝‘’都是指向的同一个地址 深浅拷贝是copy类下的方法,创建方式为 import copy copy.copy() #浅拷贝 c ...

  9. oracle获取某个月份的最后一天

    select last_day(to_date('1992-10','yyyy-mm')) from dual; 输出:1992/10/31

  10. golang sync包

    sync 在golang 文档上,golang不希望通过共享内存来进行进程间的协同操作,而是通过channel的方式来进行,当然,golang也提供了共享内存,锁等机制进行协同操作的包: 互斥锁: M ...