【题目】超长整数相加
- 请设计一个算法完成两个超长正整数的加法。
方法一:
- ①将超长整数看作字符床,用字符串进行读取
- ②遍历字符串,把接收到的字符存到数组(int型)
for (int i = 0; i < lenA; i++) {
arrA[i] = addend.charAt(lenA - 1 - i) - '0';//把字符转化位整型
}
- ③申请新的数组存储,存储各个位运算的结果(此处就是正常的十进制运算,满十进一)
for (int i = 0; i < lenS; i++) {
int sum = arrS[i] + arrA[i] + arrB[i];
int flag = sum / 10;
arrS[i] = sum % 10;
arrS[i + 1] += flag;
}
注意:
- ①新申请的数组长度位读取到字符串的最大长度+1
- ②此时得到的数组并不是最终结果:a.顺序是反的;b.可能存在多余的0 —>因此就需要我们进行下一笔操作,对数组进行整理:a.从后往前遍历数组,去掉多余的0:b.多余的0去掉之后同样从后往前遍历数组,进行最后结果的输出
import java.util.Arrays;
import java.util.Scanner;
/**
* @author yolo
* @date 2019/11/20-17:56
*/
public class Main06 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
while(input.hasNext()){
String str1=input.nextLine();
String str2=input.nextLine();
System.out.println(AddLongInteger(str1,str2));
}
}
public static String AddLongInteger(String addend,String augend) {
// 求出两个字符串中较长的那个字符串长度
int lenA = addend.length();
int lenB = augend.length();
int lenS = Math.max(lenA, lenB);
// arrS保存最终生成的结果
int[] arrA = new int[lenS];
int[] arrB = new int[lenS];
int[] arrS = new int[lenS + 1];
for (int i = 0; i < lenA; i++) {
arrA[i] = addend.charAt(lenA - 1 - i) - '0';
}
for (int i = 0; i < lenB; i++) {
arrB[i] = augend.charAt(lenB - 1 - i) - '0';
}
for (int i = 0; i < lenS; i++) {
int sum = arrS[i] + arrA[i] + arrB[i];
int flag = sum / 10;
arrS[i] = sum % 10;
arrS[i + 1] += flag;
}
int index = arrS.length-1;
while (arrS[index] != 0) {
index--;
}
int[] result = Arrays.copyOfRange(arrS, 0, index);
String str="";
for (int i = result.length - 1; i >= 0; i--) {
str+=result[i];
}
return str;
}
}
方法二: 使用BigInteger类
①把读取到的字符串通过构造方法BigInteger(String val)转化为BigInteger类型
构造方法:BigInteger(String val) :将BigInteger的十进制字符串表示形式转换为BigInteger。
使用:
BigInteger num1=new BigInteger(s1);
BigInteger num2=new BigInteger(s2);
②调用BigInteger类中的add方法,进行结果运算
import java.util.Scanner;
import java.math.BigInteger;
public class Main{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
while(input.hasNext()){
String s1=input.next();
String s2=input.next();
BigInteger num1=new BigInteger(s1);
BigInteger num2=new BigInteger(s2);
System.out.println(num1.add(num2));
}
}
}