java无限大加法和乘法的实现

本文回顾了Java中各种数字类型的存储范围,并提供了一种使用字符串存储数字的方法来实现无限大小的加法运算。该方法适用于超出常规数据类型限制的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中存储数字的类型有 short,int,long,double,float。他们的存储数据的大小是有限制的。以下来回顾下各个数据类型的存储大小的差别:

1、
基本类型:short 二进制位数:16 
包装类:java.lang.Short 
最小值:Short.MIN_VALUE=-32768 (-2的15此方)
最大值:Short.MAX_VALUE=32767 (2的15次方-1)
2、
基本类型:int 二进制位数:32
包装类:java.lang.Integer
最小值:Integer.MIN_VALUE= -2147483648 (-2的31次方)
最大值:Integer.MAX_VALUE= 2147483647  (2的31次方-1)
3、
基本类型:long 二进制位数:64
包装类:java.lang.Long
最小值:Long.MIN_VALUE=-9223372036854775808 (-2的63次方)
最大值:Long.MAX_VALUE=9223372036854775807 (2的63次方-1)
4、
基本类型:float 二进制位数:32
包装类:java.lang.Float
最小值:Float.MIN_VALUE=1.4E-45 (2的-149次方)
最大值:Float.MAX_VALUE=3.4028235E38 (2的128次方-1)
5、
基本类型:double 二进制位数:64
包装类:java.lang.Double
最小值:Double.MIN_VALUE=4.9E-324 (2的-1074次方)

最大值:Double.MAX_VALUE=1.7976931348623157E308 (2的1024次方-1)

在面试的时候我们经常会遇到到这样的笔试题,设计一款能够计算无限大小的计算器。今天我用java代码实现加法:

public String add(String str1,String str2) {
		//找出两个数据中长度较小的一个
		StringBuffer longStr = new StringBuffer(0+str2);
		StringBuffer shortStr = new StringBuffer(0+str1);
		if(str1.length()>str2.length()) {
			longStr = new StringBuffer(str1);;
			shortStr = new StringBuffer(str2);;
		}
		int longLength = longStr.length();
		int shortLength = shortStr.length();
		int addIndex = 0;
		int result = 0;
		for(int i =0;i<shortLength;i++) {			
			int l = longStr.charAt(longLength-i-1) -"0".charAt(0);//长数字在在longLength-i-1位置上的数字
			int s = shortStr.charAt(shortLength-i-1) - "0".charAt(0);//短数字在在shortLength-i-1位置上的数字
			 result = s + l + addIndex;
			if(result<10) {
				addIndex = 0;				
			}else {
				addIndex = (""+result).charAt(0) -"0".charAt(0);
				result = (""+result).charAt(1) -"0".charAt(0);
			}
			longStr.replace(longLength-i-1, longLength-i, ""+result);
		}
			String addResult = longStr.toString();
			if(addResult.startsWith("0")) {
				return addResult.substring(1);
			}
			return addResult;
	}

以上是正整数的加法实现,基本思路是:用字符串来存储数字,通过遍历字符串,让他们每一位上的数字相互加减来完成的。带小数点的计算其实也比较简单,带小数的数字分成小数点前和小数点后,分别调用上面的add方法,将得到的数字进行拼接即可。我很懒,就没有去实现了。

加法完成之后,乘法就很简单了。可以很简单粗暴的 将同一个数字重复调用 add方法n次,不过这种实现太lowB了,效率很低。有一种比较高效的方法,下午再写。现在我要去吃饭了。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值