题目
Description
输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。
Input
输入描述:
由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b。
计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
最后将C输出即可。
输入样例:
20100122201001221234567890
2010012220100122
Output
输出描述:
输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
输出样例:
20100122203011233454668012
思路:
1、以String类型接收输入的两个数;
2、然后分别将两个字符串切割,存入两个数组a[ ],b[ ] 中,因为6位数和7位数相加,和顶多是8位数(顶多比最高位多一位),因此数组长度都设为 max+1 (max是输入的两个数中最长的那个数的长度);
3、a[0] 存储个位,a[1]存储十位…位数存完的,其他位都存0,比如1362 和 12 ,
a[0] = “2”、a[1] = “6”、a[2] = “3”、a[3] = “1”、a[4] = “0”;
b[0] = “2”、b[1] = “1”、b[2] = “0”、b[3] = “0”、b[4] = “0”
4、最后求完和,要记得判断最高位是否为0,为0的话则不输出最高位,比如上面的例子,相加后,结果为:01374
import java.util.Scanner;
public class HighPrecisionAddition {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.next(); //输入的第一个值
String s2 = sc.next(); //输入的第二个值
int l1 = s1.length();
int l2 = s2.length();
int max = l1 > l2 ? l1 : l2; //求出最长字符串的长度大小
int r = 0; //存放进位
//6位数和7位数相加,和顶多是8位数,故数组长度设为max+1
String[] a = new String[max+1];
String[] b = new String[max+1];
String[] c = new String[max+1];
/*
substring(a,b)截取字符串
举例:
"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"
注意字符串索引从0开始
*/
for(int i = 0; i < max+1; i++) {
if( i < l1 ) {
a[i] = s1.substring(l1-1-i, l1-i);
}else {
a[i] = "0";
}
}
for(int i = 0; i < max+1; i++) {
if( i < l2 ) {
b[i] = s2.substring(l2-1-i, l2-i);
}else {
b[i] = "0";
}
}
/*
Integer.parseInt(String s): 返回 用十进制参数表示的整数值类型(即转为int类型)
String.valueOf(int i): 返回 int 参数的字符串表示形式(即转为String类型)
*/
for(int i = 0; i < max+1; i++) {
c[i] = String.valueOf((Integer.parseInt(a[i]) + Integer.parseInt(b[i]) + r) % 10) ;
r = (Integer.parseInt(a[i]) + Integer.parseInt(b[i]) + r) / 10;
}
//首位去0:首位不为0,则输出
if( !"0".equals(c[max]) ) {
System.out.print(c[max]);
}
for(int i = max-1; i >= 0; i--) {
System.out.print(c[i]);
}
}
}