这道题是一道基础的大数题
题中说明输入不会超出1000个数,即计算的数在10^1000内
如此大的数如果用普通的 long sum = a+b 一定会超出范围,所以需要用其他的方法来解决
解决之前,需要注意几点要求:
输入为先输入一个n,表示n组测试,可以用如下写法:
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1; i<=n; i++) {
}
输出格式:
Case 1:
a + b = sum
每两个输出之间要有一个空行
需要注意的是这并不是在每次输出后面多输出一个空行就行了,那样会PE
因为最后一次输出后面不应该有空行
《=======================================================》
如果用c或c++,则需要用字符串来存储a和b,并自己实现a+b
但是使用Java的话,因为Java提供了大数运算,所以只需要几行代码即可完成:
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1; i<=n; i++) {
BigDecimal a = sc.nextBigDecimal();
BigDecimal b = sc.nextBigDecimal();
System.out.println("Case "+i+":");
System.out.println(a+" + "+b+" = "+a.add(b));
if(i!=n){
System.out.println();
}
}
}
}
但是为了掌握大数(闲的发慌),我还是自己用Java对实现大数加法进行了尝试:
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1; i<=n; i++){
String a = sc.next();
String b = sc.next();
String c = "";
String newA = "";
String newB = "";
String newC = "";
for(int j = a.length()-1; j>=0; j--){
newA += a.charAt(j);
}
for(int j = b.length()-1; j>=0; j--){
newB += b.charAt(j);
}
int maxL = a.length()>b.length()?a.length():b.length();
int k = 0;
for(int j = 0; j<maxL; j++){
int ai;
if(j >= a.length()){
ai = 0;
}else{
ai = newA.charAt(j)-'0';
}
int bi;
if(j >= b.length()){
bi = 0;
}else{
bi = newB.charAt(j)-'0';
}
char ch = (char)((ai+bi+k)%10+'0');
if((ai+bi+k)/10==0){
k = 0;
}else{
k = 1;
}
newC += ch;
if(j == maxL-1){
if(k == 1){
newC += "1";
}
}
}
int kk = 0;
for(int j = newC.length()-1; j>=0; j--){
if(kk == 0 && newC.charAt(j) == '0'){
continue;
}else{
kk = 1;
}
c += newC.charAt(j);
}
System.out.println("Case "+i+":");
System.out.println(a+" + "+b+" = "+c);
if(i!=n){
System.out.println();
}
}
}
}
因为java写起来不习惯,所以有很多地方没有优化,不过还是能AC的。其中奥秘大家自己领悟。。。
但是在实现完成之后还是出现了WA的情况
因为这样一组数据:0001 + 0002 = ?
如果输出 0003 的话就会WA,结果应该为 3
重点!!!考试要考!!!