问题:

  大数相加不能直接使用基本的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. python进行两个大数相加

    python进行两个大数相加:由于int类型32位或64位都有长度限制,超出会内存溢出,无法计算,那么解决方法如下: 思路: 1.将超长数转换成字符串 2.进行长度补零,即让两个要计算的字符串长度一样 ...

  2. 两个大数相乘-Java

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

  3. [LeetCode] 2. Add Two Numbers 两个数字相加 java语言实现 C++语言实现

    [LeetCode] Add Two Numbers 两个数字相加   You are given two non-empty linked lists representing two non-ne ...

  4. 字符串模拟大数相加——Java实现

    本题是CVTE二面编程题,首先考虑返回值肯定是一个字符串(int会有溢出可能),并且两个字符串只含数字,不含”+“.”-“这种. 代码如下: public static String add(Stri ...

  5. [ACM] ZOJ Martian Addition (20进制的两个大数相加)

    Martian Addition Time Limit: 2 Seconds      Memory Limit: 65536 KB   In the 22nd Century, scientists ...

  6. 大数相加Java

    题目 以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回. 分析 两个字符串,定义两个指针,分别从这两个字符串的结尾开始遍历,因为可能字符串1比字符串2长度要长,因此只要两者其中有 ...

  7. 用单向链表实现两数倒序相加(java实现)

    很久没做算法题了,准备重操旧业,于是刷了一波LeetCode,看到一个比较经典的链表算法题,分享出来. 题目 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将 ...

  8. poj 1503 大数相加(java)

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

  9. Java去重字符串的两种方法以及java中冒号的使用

    package com.removesamestring; import java.io.BufferedWriter; import java.util.ArrayList; import java ...

随机推荐

  1. Java Selenium封装--RemoteWebElement

    package com.liuke.selenium.driver; import java.sql.SQLException; import java.util.List; import org.j ...

  2. 每天一命令 git stash

    git stash  命令是用于保存当前进度的命令.该命令会保存当前工作区的改动.保存的改动是已经跟踪的文件的改动,对于未跟踪的改动stash是不会保存的. git stash 命令常用于分支切换的 ...

  3. mysql memory表性能测试以及使用场景

    最近公司计划将风控逻辑移到slave库进行计算,因为考虑到业务表数据会比较大,此时如果还是走nest-loop的话,即使unique进行连接,因为还是需要至少2次以上LIO才能读一条记录,如果达到类似 ...

  4. Web Uploader - 功能齐全,完美兼容 IE 的上传组件

    文件上传是网站和 Web 应用程序的常用功能,一直没有一款完美的文件上传组件,因此让很多开发人员碰到头疼的浏览器兼容问题. WebUploader 是由 Baidu FEX 团队开发的一款以 HTML ...

  5. [DeviceOne开发]-地区选择

    一.简介 该demo主要通过do_ComboBox和do_Picker的selectChanged事件,实现省市县三级联动的功能 二.效果图 三.源码地址 https://github.com/do- ...

  6. 为Windows Azure Web站点添加MIME类型解决文件下载失败的问题

    这几天在倒腾Autodesk 360 Viewer,前面的文章也介绍过了,这将是一个全新的在线模型浏览工具.我做了个实验,把A360Viewer放在一个web 站点,然后发布到Windows Azur ...

  7. inputType属性

    android中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用.这也大大的方便的操作.有时需要虚拟键盘只为字符或只为数字.所以inputType尤为重要.<E ...

  8. Java虚拟机JVM学习05 类加载器的父委托机制

    Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap ...

  9. c++引用总结

    一.变量的引用: 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名:  例:char ch;        cha ...

  10. Xcode安装插件,错误选择了Skip Bundles,重新出现Load Bundles方法

    Xcode安装插件经常会遇到这样的问题,出现提示性选择,还是英文提示,所以没仔细看就习惯性的选择了右侧的按钮 点击了Skip Bundle,结果悲剧的发现,发现插件完全失效了,以后不管怎么打开Xcod ...