HDU 1002 A+B problemII

问题:我有一个简单的问题给你,给你两个整数,你的工作是计算A+B的和

输入:

第一行输入包括一个整数T(1<=T<=20)表示测试案例的数量。然后有T行,每行包括两个正数,A和B。注意到这两整数非常大,意味着你不能用32位的整数操作它们。你可以假设每个整数的长度不超过1000。

输出:

对于每一个案例,你应该输出两行。第一行是Case #:,第二行是A + B = ?,等号旁边都有空格。两个案例之间用空行隔起来。

Sample Input
  
  
2 1 2 112233445566778899 998877665544332211
 
Sample Output
   
   
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
import java.util.Scanner;
//用字符串实现大数相加
public class Main {
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int num=cin.nextInt();
		int j=0;
		for(j=0;j<num;j++){
		String a = cin.next();
		String b = cin.next();
		Add(num,j,a, b);
		}

	}

	public static void Add(int num,int j,String a, String b) {            //加法函数
		String a1 = invert(a);                                        //因为加法都是从低位开始,所以把数字倒过来
		String b1 = invert(b);
		if (a1.length() < b1.length()) {                              //将长度较长的放在前面
			String temp = a1;
			a1 = b1;
			b1 = temp;
		}
		int jin = 0;         //进位值
		char aa[] = a1.toCharArray();
		char bb[] = b1.toCharArray();
		int[] sum = new int[a1.length() + 1];
		for (int i = 0; i < b1.length(); i++) {                              //两个数都存在的情况下的加法
			int t = ((int) aa[i] - 48) + ((int) bb[i] - 48) + jin;

			if (t >= 10) {// 进位
				jin = t / 10;// 进位值
				t = t % 10;// 留下的值
			} else
				jin = 0;
			sum[i] = t;
		}
		for (int i = b1.length(); i < a1.length(); i++) {                    //当一个数字加完之后,剩下长的数字余下的部分的加法,考虑进位的不同
			int t = jin + ((int) aa[i] - 48);
			if (t >= 10) {// 进位
				jin = t / 10;// 进位值
				t = t % 10;// 留下的值
			} else
				jin = 0;
			sum[i] = t;
		}
		System.out.println("Case "+(j+1)+":");
		System.out.print(a+" + "+b+" = ");
		if (jin != 0) {
			sum[a1.length()] = jin;                                       //判断最后一位是否有进位。
			for (int i = a1.length(); i >= 0; i--) {
				System.out.print(sum[i]);                             //按字符输出
			}
		} else {
			for (int i = a1.length() - 1; i >= 0; i--)
			System.out.print(sum[i]);
			}
		System.out.println();
		if(j!=(num-1)){System.out.println();}
		
	}

	public static String invert(String str) {
		StringBuilder newStr = new StringBuilder();
		for (int i = str.length() - 1; i >= 0; i--)
			newStr.append(str.charAt(i));
		return newStr.toString();
	}
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值