先瞅瞅题目
当时我看到这题,都没仔细阅读直接开写,结果没通过,然后我又仔细读了一遍题目,大意了。。。先看我写的代码就知道我错哪了
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
我写的代码虽然不能通过检测,但是也能给大家带点思路吧,
关于Java的BigDecimal详解,看可以看看这篇文章,同时也可以看看jdk里面的描述。
https://www.cnblogs.com/zhangyinhua/p/11545305.html