Java大整数的加减乘除

由于大整数的加减乘除所得结果的位数可能很长,甚至超过32位,所以一般都用字符串或者数组存储进行运算

一、大整数相加

比如 :求 1234 + 456

  1. 先把位数补齐一致,变成:1234 + 0456
  2. 从后往前,逐位相加,每次用一个变量记录是否要进位
  3. 最后在判断第一位是否要进位
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//输入两个字符串类型的大数字
		String s1 = in.nextLine();
		String s2 = in.nextLine();
		String result = add(s1, s2);
		System.out.println(result);
	}
	
	private static String add(String s1, String s2) {
		//保证s1小于或等于s2的长度,方便后面补0
		if(s1.length() > s2.length()) {
			String temp = s1;
			s1 = s2;
			s2 = temp;
		}
		int cha = s2.length() - s1.length();
		for(int i=0; i<cha; i++) {
			s1 = '0' + s1;	//给长度小的前面补0,使两个数长度相等
		}
		String result = "";
		int w = 0;	//定义一个变量用来存储进位
		//从后往前,逐位相加
		for(int i=s2.length()-1; i>=0; i--) {
			//从s1和s2中取出的是字符,所有减去48得到的就是 int类型的数字,再加上进位就是当前位的结果
			int c = s2.charAt(i) + s1.charAt(i) - 96 + w;
			w = c / 10; //两个一位的int类型数字相加最大是十几,所有除以10就是进位
			result = (c%10) + result;
		}
		//因为上面的循环没有判断加到第一位时的进位,所以在最后判断一下
		if(w == 1) result = 1 + result;
		return result;
	}
}

二、大整数相乘

代码思路 : 多位数乘多位数,用其中一个多位数的每一位单独乘以另一个多位数,再把所得的乘积全部累加起来。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
        String s1 = sc.nextLine();//输入两个数字
        String s2 = sc.nextLine();    
        String result = muilt(s1,s2);
        
        System.out.println(result);
	}
	
	private static String muilt(String s1,String s2) {
		String result = "";
		//******************核心步骤开始***************************
		for(int i=0; i<s2.length(); i++) {		//把s2拆分成一个一个的与s1相乘
			String temp = per(s1,s2.charAt(i));   //计算s2每位数与s1的乘积
			result = add(result,add_0(temp,s2.length()-1-i));	//累加乘积;因为每次的乘积位置不一样,所以要先补0
		}
		//******************核心步骤结束***************************
		return result;
	}
	//计算s2每位数与s1的乘积
	private static String per(String s1, char c) {
		int n = c - '0';
		String result = "";
		int w = 0;
		for(int i=s1.length()-1; i>=0; i--) {
			int m = (s1.charAt(i)-'0')*n+w;
			w = m/10;
			result = m%10 + result;
		}
		if(w != 0) result = w + result;
		return result;
	}
	//累加的方法
	private static String add(String s1, String s2) {
		if(s1.length() > s2.length()) {
			String t = s1;
			s1 = s2;
			s2 = t;
		}
		int cha = s2.length() - s1.length();
		for(int i=0; i<cha; i++) {
			s1 = '0' + s1;
		}
		String result = "";
		int w=0;
		for(int i=s2.length()-1; i>=0; i--) {
			int c = s2.charAt(i)+s1.charAt(i)-96+w;
			w = c/10;
			result = (c%10) + result;
		}
		if(w==1) result = 1+result;
		return result;
	}
	//给得到的乘积后面补0
	private static String add_0(String temp, int i) {
		for(int j=0; j<i; j++) {
			temp = temp + '0';
		}
		return temp;
	}
}

 


参考博客:https://blog.csdn.net/u014298282/article/details/84197619


       *****************************************  结束喽!* _ *   ************************************************

猜你喜欢

转载自blog.csdn.net/jingzhi111/article/details/88753829