高精度/特大数加法
A+B?一个简单的计算。但是当数据量非常大的数之下呢?int就不够用了,long也不够用了,那我们怎么做呢?
编程思想:使用数组将数字的每一位都装起来,按十进制来一位一位 的计算,这个就类似笔算中的进位
import java.util.Scanner;
public class S1034 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String num1=input.next();
String num2=input.next();
String num="";//通过字符串来装超长的数以实现大小无限制
boolean flage=false;
int len1=num1.length();//求得每个数据长度,用来对齐位数
len1--;
int len2=num2.length();//上同
len2--;
while(len1>=0||len2>=0){//以最长数据长度截止计算,从个位开始加
int n1=0;
int n2=0;
if(len1>=0)n1=(int)(num1.charAt(len1--)-'0');//将字符数据转换为整型
if(len2>=0)n2=(int)(num2.charAt(len2--)-'0');
int sum=n1+n2;//每一位相加值暂时存储于sum
if(flage) {
sum+=1;//进位,因为个位最大相加9+9=18是不会超过20的所以只需要加1即可
flage=false;//进位完成,重新赋值
}
if(sum>=10)flage=true;//判断是否某一位相加大于10,大于就需要进位
char ch=(char)(sum%10+'0');
num+=ch;//将完全处理后的每位数据装进字符串内部
}
//循环终止
if(flage) {
num+="1";//判断是否最后一次相加还是需要进位的,需要就在进一位
}
//输出数据,因为数据是从个位开始装在字符串里面的所以需要逆序输出
for(int i=num.length()-1;i>=0;i--)
{
System.out.print(num.charAt(i));
}
input.close();
}
}
当然也有更简便的使用Java特大数类型BigInteger
import java.math.BigInteger;
import java.util.Scanner;
public class 高精度加法 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String num1=input.next();
String num2=input.next();
input.close();
BigInteger bignum1=new BigInteger(num1);
BigInteger bignum2=new BigInteger(num2);
System.out.println(bignum1.add(bignum2));
}
}