骄傲的代价-Rwen的博客

骄傲的代价

Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description

E_star由于在上次考试中取得了很好的成绩他开始骄傲起来,此时von看不下去了,于是就想找他的岔,他把E_star叫来说最近一道A+B编程题目不会,想要让同是计算机专业的E_star来帮他解答,E_star由于考试后的骄傲心理,二话没说结一口答应了,等到von用qq把题目要求发给E_star的时候他傻眼了。自己根本就不会,其实von知道他不会故意整他的。他为了留住面子只好请他最好的朋友你帮他解答了。这下知道骄傲的后果了吧。

Input

题目有多组数据,处理到文件结束。输入的第一行包含一个数T代表测试组数;

接下来有T行,每行有两个数A,B;

Output

对于每一组数据输出的第一行是"Case #:"代表第几组数据;

接下来一行是A+B=以及A+B的和。

具体输出格式见样例。

Sample Input

2
1 2
112233445566778899 998877665544332211

Sample Output

Case 1:
1+2=3
Case 2:
112233445566778899+998877665544332211=1111111111111111110

package java13;//注意如果用**数值**型进行计算会超范围,所以选在将数值以**字符串**的形式存起来。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan=new Scanner(System.in );
		int t=scan.nextInt();
		for(int i=1;i<=t;i++)
		{
			System.out.println("Case "+i+":");
			String str1=scan.next();
			String str2=scan.next();//输入两个字符串型数
			int a=0;//标记进位
			int j=str1.length()-1,k=str2.length()-1;//从最低位开始加减
			int max=Math.max(j+1, k+1);
			int[] nummer=new int[max+100];
			int len=0;
			for(;j>=0&&k>=0;j--,k--)
			{
				int s1=str1.charAt(j)-'0';
				int s2=str2.charAt(k)-'0';//每一位字符数字转为数值型
				if(s1+s2+a>=10)//判断是否有进位产生
				{
				nummer[len]=(s1+s2+a)%10;//有则取余保存
				len++;
				a=1;//产生进位为一
				}
				else
				{
					nummer[len]=s1+s2+a;//没有进位则直接保存相加后的数字
					len++;
					a=0;//进位为零
				}//注意两位十进制数相加不会超过20,所以不产生进位时,等价于产生的进位为0,而产生进位时进位只能是1
				
			}
			String str = null;//定义一个字符串变量用来保存,剩下的一部分,比如678456+123,会剩下前三位678,保存到str中
			if(j==-1)
				str=str2.substring(0,k+1);
			else if(k==-1)
				str=str1.substring(0,j+1);
			for(int l=str.length()-1;l>=0;l--)
				{
					if(str.charAt(l)-'0'+a>=10)
					{
						nummer[len++]=(str.charAt(l)-'0'+a)%10;
						a=1;
					}else
					{
						nummer[len++]=str.charAt(l)-'0'+a;
						a=0;
					}
				}
				if(a==1)
					nummer[len++]=a;//最后一位如果产生进位需要保存
				System.out.print(str1+"+"+str2+"=");
				for(int l=len-1;l>=0;l--)
				{
					System.out.print(nummer[l]);
				}System.out.println();
			
		}
		scan.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值