由于大整数的加减乘除所得结果的位数可能很长,甚至超过32位,所以一般都用字符串或者数组存储进行运算
一、大整数相加
比如 :求 1234 + 456
- 先把位数补齐一致,变成:1234 + 0456
- 从后往前,逐位相加,每次用一个变量记录是否要进位
- 最后在判断第一位是否要进位
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
***************************************** 结束喽!* _ * ************************************************