Java实现大数加法运算的几种方法
大数加法
思路一:定义String变量str1和str2分别存储输入的两个大数,定义num1[]和num2[]两个int型数组,将两个字符串分别逐个字符逆序存入数组,定义sum[]数组存放求和结果,使用循环两个数组中的元素逐位相加,并判断是否进位,最后逆序输出数组sum[]中的每个元素。
import java.util.Scanner;
public class largenumberOperationAdd {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个高位整数:");
String str1=sc.next();
System.out.println("请输入第二个高位整数:");
String str2=sc.next();
int[] num1=new int[str1.length()]; //num1[]存储第一个大数
int[] num2=new int[str2.length()]; //num2[]存储第二个大数
int len=1+Math.max(str1.length(),str2.length());//找到两个大数中位数更高的一个并+1,设置为求和数组的长度
int[] sum=new int[len]; //sum[]存储两大数之和
for (int a=0;a<str1.length();a++){
//将str1数字逐个倒序放入数组num1[]
num1[str1.length()-a-1]=Integer.parseInt(str1.substring(a,a+1));
}
for (int b=0;b<str2.length();b++){
//将str2数字逐个倒序放入数组num2[]
num2[str2.length()-b-1]=Integer.parseInt(str2.substring(b,b+1));
}
int overflow=0;
for (int i=0;i<len-1;i++){
//逐位相加,满10进1
sum[i]=num2[i]+num1[i]+overflow;
if (sum[i]>=10){
sum[i]=sum[i]%10;
overflow=1;
}else{
overflow=0;
}
}
for (int j=len-1;j>=0;j--){
System.out.print(sum[j]);
}
}
}
largenumberOperationAdd
思路二,使用栈结构实现将输入的数字依次存进栈中(栈有先进后出的特点,所以先输入的高位上的数字会被存在栈的底层),在计算和的时候从两个栈中依次取出数据相加存入新的栈中(计算时在栈顶的是个位,然后是十位,以此类推,存进新的栈时在栈底的是个位,然后是十位,以此类推),最后将存放计算结果的栈中元素自顶向底取出打印,这种方法效率较高,时间复杂度低,但是空间复杂度很大,需要占用较多的空间资源。
Java实现大数加法运算的几种方法的更多相关文章
- C语言不使用加号实现加法运算的几种方法
今天看到<编码:隐匿在计算机软硬件背后的语言>的第十二章:二进制加法器.讲述了全加器,半加器的原理以及如何实现加法.实现加法时所使用的全加器,半加器中包含的所有逻辑门在C语言中都有相应的运 ...
- Java中获取键盘输入值的三种方法
Java中获取键盘输入值的三种方法 Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值 ...
- java 获取键盘输入常用的两种方法
java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...
- Java 8创建Stream流的5种方法
不知不觉间,Java已经发展到13了,来不及感慨时间过得真的太快了,来不及学习日新月异的技术更新,目前大多数公司还是使用的JDK8版本,一方面是版本的稳定,另一方面是熟悉,所以很多公司都觉得不升级也挺 ...
- java实现大数加法、乘法(BigDecimal)
之前写过用vector.string实现大数加法,现在用java的BigDecimal类,代码简单很多.但是在online-judge上,java的代码运行时间和内存大得多. java大数加法:求a+ ...
- 在shell script中进行数值运算的两种方法
方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...
- Java入门:Java中获取键盘输入值的三种方法
Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代 ...
- java四舍五入保留两位小数4种方法
4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ...
- Java中实现线程同步的三种方法
实现同步的三种方法 多线程共享数据时,会发生线程不安全的情况,多线程共享数据必须同步. 实现同步的三种方法: 使用同步代码块 使用同步方法 使用互斥锁ReetrantLock(更灵活的代码控制) 代码 ...
随机推荐
- 分治FFT的三种含义
分治FFT是几个算法的统称.它们之间并无关联. 分治多项式乘法 问题如求\(\prod_{i=1}^na_ix+b\). 若挨个乘复杂度为\(O(n^2\log n)\),可分治做这件事,复杂度为\( ...
- 如何给CentOS 安装Vmware Tools
1.打开电脑中的VMware Workstation 软件,并启动安装了CentOS6.9系统的虚拟机 2.点击“”other”,在Username中输入root,在Password ...
- Active Directory: LDAP Syntax Filters
LDAP syntax filters can be used in many situations to query Active Directory. They can be used in VB ...
- Lua语言自学之01.基础概念的理解
编程不只是这么简单,它的思维是理性的编程思维,操纵机器干事本来就不是一件简单的事,要干什么,该怎么做,怎么做得才好. 脚本的概念在程序中十分重要,在游戏开发领域,它更是决定性的.脚本语言让程序员可以区 ...
- D. Maximum Diameter Graph 贪心+图论+模拟
题意:给出n个点的度数列 上限(实际点可以小于该度数列)问可以构造简单路最大长度是多少(n个点要连通 不能有平行边.重边) 思路:直接构造一条长链 先把度数为1的点 和度数大于1的点分开 先把度数 ...
- CF757E Bash Plays with Functions
题解 q<=1e6,询问非常多.而n,r也很大,必须要预处理所有的答案,询问的时候,能比较快速地查询. 离线也是没有什么意义的,因为必须递推. 先翻译$f_0(n)$ $f_0(n)=\sum_ ...
- restful设计规范
什么是restful? REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类 ...
- java Ajax跨域请求COOKIE无法带上的解决办法
1.web.xml加入以下节点,,一定放在第一个filter <!--目录下所有文件可以跨域Begin--> <filter> <filter-name>CorsF ...
- gdb core 调试多线程
ref :http://blog.sina.com.cn/s/blog_62dc94eb0100flyn.html 如果目标进程已经core dump了,那么 gdb -c core xxx xx ...
- canvas绘图工具
关于canvas绘图,在html页面上太方便了.当然刚开始还是入了不少坑,用了比如jcanvascript等三方插件.真实效果反而不理想,后来就没用插件. 下面是实现效果,可以在线绘制工地图然后传给后 ...