HDU-1002 A + B Problem II 解题报告

这道题是一道基础的大数题

题中说明输入不会超出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

重点!!!考试要考!!!

猜你喜欢

转载自blog.csdn.net/Timo_Max/article/details/81318954
今日推荐