java编程实现两个大数相加代码示例

 更新时间:2017年12月06日 11:50:01   作者:静水流深之鑫  
这篇文章主要介绍了java编程实现两个大数相加代码示例,具有一定参考价值,需要的朋友可以了解下。

通常情况,实现大数运算是通过BigInteger和BigDecimal两种方法。这两种方法分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数)。主要用于高精度计算中。这两个类使得java中的大数,高精度运算变得很简单。但本文介绍的并不是通过上述两种方法实现Java中的大数运算。

主要的思想是:把两个数存在String中了,然后将每个数字取出,放到数组,由最末位开始计算,算加法,判断是否进位,进位则前位+1,若超过长度,则copy到新的数组。

代码如下:

public class BigIntAdd {
	private int[] array;
	//声明一个数组 
	//计算大数相加的函数 
	public static String bigAdd(BigIntAdd fisrtNum, BigIntAdd secondNum) {
		String result = "";
		Boolean falg = false;
		//判断数组是否越界的标志 
		int[] arrayOne;
		int[] arrayTwo;
		int[] arrayThree = null;
		//把较长的字符串放到arrayOne数组中,因为要把计算结果放到arrayOne数组中 
		if (fisrtNum.instance().length >= secondNum.instance().length) {
			arrayOne = fisrtNum.instance();
			arrayTwo = secondNum.instance();
		} else {
			arrayOne = secondNum.instance();
			arrayTwo = fisrtNum.instance();
		}
		for (int i = 0; i < arrayTwo.length; i++) {
			if (arrayOne[i] + arrayTwo[i] < 10) {
				//不需要进位时 
				arrayOne[i] = arrayOne[i] + arrayTwo[i];
			} else if (arrayOne[i] + arrayTwo[i] >= 10) {
				//需要进位时 
				arrayOne[i] = arrayOne[i] + arrayTwo[i] - 10;
				if ((i + 1) < arrayOne.length) {
					arrayOne[i + 1] = arrayOne[i + 1] + 1;
					//下一位的值加1
				} else {
					//当arrayOne的长度不够时要把其复制到arrayThree中 
					falg = true;
					arrayThree = new int[arrayOne.length + 1];
					System.arraycopy(arrayOne, 0, arrayThree, 0,arrayOne.length);
					arrayThree[arrayOne.length] = 1;
					//把arrayThree最高位赋值1,等价于进位的1
				}
			}
		}
		//把数组arrayThree中的元素全部的拼接为字符串 
		if (falg) {
			for (int i : arrayThree) {
				result += i;
			}
		} else {
			for (int i : arrayOne) {
				result += i;
			}
		}
		//把结果反转返回 
		return new StringBuffer(result).reverse().toString();
	}
	//初始化数组方法 
	private int[] instance() {
		return array;
	}
	//初始化构造方法 
	public BigIntAdd(String num) {
		StringBuffer sb = new StringBuffer(num);
		String string = sb.reverse().toString();
		//实现字符串反转,便于计算 
		array = new int[string.length()];
		//把字符串转化为数组 
		for (int i = 0; i < string.length(); i++) {
			array[i] = Integer.valueOf(string.substring(i, i + 1));
		}
	}
	public static void main(String [] args){
		String result=BigIntAdd.bigAdd(new BigIntAdd("5211111111"), new BigIntAdd("4099999999"));
		System.out.println(result);
	}
}

结果:

总结

以上就是本文关于java编程实现两个大数相加代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

相关文章

  • Java中的Spring循环依赖详情

    Java中的Spring循环依赖详情

    这篇文章主要介绍了Java中的Spring循环依赖详情,文章基于Java的相关资料展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-04-04
  • Java如何生成压缩文件工具类

    Java如何生成压缩文件工具类

    这篇文章主要介绍了Java如何生成压缩文件工具类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java异常处理机制深入理解

    Java异常处理机制深入理解

    如果某个方法不能按照正常的途径完成任务,就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时,这个方法会立刻退出同时不返回任何值。另外,调用这个方法的其他代码也无法继续执行,异常处理机制会将代码执行交给异常处理器
    2022-01-01
  • Java RabbitMQ的三种Exchange模式

    Java RabbitMQ的三种Exchange模式

    这篇文章主要介绍了Java RabbitMQ的三种Exchange模式,分别为Direct模式、Fanout模式、Topic模式,Rabbit的Direct Exchange模式是指消息发送导RouteKey中指定的Queue,Direct模式可以使用Rabbit自带的Exchange
    2022-08-08
  • Spring实战之缓存使用key操作示例

    Spring实战之缓存使用key操作示例

    这篇文章主要介绍了Spring实战之缓存使用key操作,结合实例形式分析了Spring缓存使用key具体配置、属性、领域模型等相关操作技巧,需要的朋友可以参考下
    2020-01-01
  • UrlDecoder和UrlEncoder使用详解_动力节点Java学院整理

    UrlDecoder和UrlEncoder使用详解_动力节点Java学院整理

    这篇文章主要为大家详细介绍了UrlDecoder和UrlEncoder使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 快速了解hibernate配置文件与映射文件

    快速了解hibernate配置文件与映射文件

    这篇文章主要介绍了快速了解hibernate配置文件与映射文件,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • 浅谈SpringSecurity注解与AOP切面执行顺序

    浅谈SpringSecurity注解与AOP切面执行顺序

    这篇文章主要介绍了浅谈SpringSecurity注解与AOP切面执行顺序,引入Spring Security后,在Controller的方法中会出现Spring Security的方法注解与AOP同时存在的问题,这是就会设计顺序问题,需要的朋友可以参考下
    2023-10-10
  • 一文掌握Springboot集成RabbitMQ的方法

    一文掌握Springboot集成RabbitMQ的方法

    RabbitMQ是开源的消息队列服务器,实现了AMQP高级消息队列协议标准,AMQP 是一种应用层协议,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制,这篇文章主要介绍了Springboot集成RabbitMQ的过程,需要的朋友可以参考下
    2024-04-04
  • Java实现视频时间维度剪切的工具类

    Java实现视频时间维度剪切的工具类

    这篇文章主要为大家详细介绍了将视频按照时间维度进行剪切的Java工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12

最新评论