自己写的大整数的加减乘除法JAVA实现--待完成

本文介绍了一种使用Java实现的大整数加法、减法的方法。通过字符串操作处理任意长度的数字运算,适用于超出常规整型变量所能表示的数值范围。文章详细展示了算法流程,并提供了一个示例程序。

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

package chow.test;

/**
 * @author Chow
 * @date Jun 7, 2010
 * @Description 大整数的加法,减法,乘法,除法
 */

public class BigNumOperation {
	private static String result;
	
	//加法,从低位加起,逢十进一
	public static String add(String firstNum, String secondNum){
		result = "";
		int maxLength = firstNum.length() >= secondNum.length() ? firstNum.length() : secondNum.length();
		int index = maxLength - 1;
		int carry = 0;
		
		while(firstNum.length() < maxLength){
			firstNum = "0" + firstNum;
		}
		
		while(secondNum.length() < maxLength){
			secondNum = "0" + secondNum;
		}
		
		while(index >= 0){
			int firstInt = Integer.valueOf(firstNum.substring(index, index + 1));
			int secondInt = Integer.valueOf(secondNum.substring(index, index + 1));
			result += (firstInt + secondInt + carry) % 10;
			carry = (firstInt + secondInt + carry) / 10;
			index--;
		}
		
		if(carry != 0){
			result += carry;
		}
		
		return revert(result);
	}
	
	//减法,分三种情况:1.两者相等,返回0,2:大数减小数,小数补0,逐位减,借位;3:小数减大数,转化为2,加-号
	public static String minus(String firstNum, String secondNum){
		result = "";
		String sign = "";
		if(firstNum.equals(secondNum)){
			return "0";
		}
		//小数-大数,交换firstNum与secondNum,并符号置为-
		if(firstNum.length() < secondNum.length() 
				|| (firstNum.length() == secondNum.length() && firstNum.compareTo(secondNum) < 0)){
			sign = "-";
			String tmp = firstNum;
			firstNum = secondNum;
			secondNum = tmp;
		}
		//若小数(secondNum)不足位,高位补0
		while(secondNum.length() < firstNum.length()){
			secondNum = "0" + secondNum;
		}
		//大数从低位开始,逐位减小数
		int index = firstNum.length() - 1;
		int borrow = 0;	//记录借位
		while(index >= 0){
			int left = firstNum.charAt(index) - secondNum.charAt(index) + borrow;
			if(left < 0){
				borrow = -1;
				left += 10;
			}
			result = left + result;
			index--;
		}
		//去除多余的前导0
		while(result.indexOf("0") == 0){
			result = result.substring(1);
		}
		return sign + result;
	}
	
	//反转字符串
	public static String revert(String string){
		char[] charArray = new char[string.length()];
		for(int i = 0; i < string.length(); i++){
			charArray[i] = string.charAt(string.length() - 1 - i);
		}
		return new String(charArray);
	}
	
	public static void main(String[] args){
		System.out.println(BigNumOperation.add("4561427489456123", "798754564567343"));
		System.out.println(BigNumOperation.minus("5345435435", "543543543543"));
	}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值