先瞅瞅题目
当时我看到这题,都没仔细阅读直接开写,结果没通过,然后我又仔细读了一遍题目,大意了。。。先看我写的代码就知道我错哪了
import java.util.*; /** * @author 20248 */ public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); //输入两个数 int a =sc.nextInt(); int b =sc.nextInt(); String aa = Integer.toString(a); String bb = Integer.toString(b); //得到他们的长度 int a_length = aa.length(); int b_length = bb.length(); int length = a_length>b_length?a_length:b_length; //数组大小又最长的决定,因为要进位所以长度+1,方便后面的遍历 //写代码,和看代码是两回事,自己写了才知道为什么这样做 int[] a1 = new int[length+1]; int[] b1 = new int[length+1]; //将数字按照题目要求放入数组 for (int i =0;i<length+1;i++){ //得到低位的数字 int temp = a%10; a1[i] = temp; //新的值 int a_in = a/10; //重新传给a a = a_in; } for (int j = 0;j<length+1;j++){ int temp = b%10; b1[j] = temp; int b_in = b/10; b = b_in; } //放入结果的数组 int[]c = new int[length+1]; //ti表示进位 int ti = 0; //因为a1和b1后几位可能为0 for (int i =0;i<=length;i++){ if (a1[i]==0&&b1[i]==0){ //遍历到0就可以结束了。 break; } //相加的结果为个位数,则直接相加放入c,要加上进位的ti。 if ((a1[i] + b1[i])/10 == 0 ){ c[i] = a1[i] + b1[i]+ti; //当相加的2个数都不进位时,则需要将ti值为0 ti = 0; }else { //如果为2位数 int first = a1[i] + b1[i]; //将2位数的个位存入c中 c[i] = first%10+ti; //求得进位ti ti = first/10; } } for (int i =length;i>=0;i--){ //倒序遍历 if (c[i] == 0){ //因为结果可能为[4,1,2,0,0,0] continue; } System.out.print(c[i]); } } }
写完后精神抖擞,高兴的上传,结果就和上面的图中所示,当场吐血,我想代码肯定没问题,我又看了看题,
/** * @author 20248 */ import java.math.BigDecimal; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); BigDecimal a = scanner.nextBigDecimal(); BigDecimal b = scanner.nextBigDecimal(); BigDecimal c = a.add(b); System.out.println(c); } }
所以昨晚这道题,我总结了2点
1.审题仔细
2.多查jdk