xtu oj 1214 A+B IV

发布时间:2023年12月17日
题目描述

小明喜欢做a+b的算术,但是他经常忘记把末位对齐,再进行加,所以,经常会算错。 比如12+13,他把12左移了1位,结果变成了133。 小明已经算了一些等式,请计算一下他到底移动了多少位。

输入

第一行是一个整数K,表示样例的个数。 以后每行一个样例,形如a+b=c, 1≤a,b≤1e4;0≤c≤1e9。

输出

每行输出一个样例的结果,以b为标准,a如果往左移n位,输出n,如果往右移n位,输出-n。 测试数据保证一定有解,如果存在多个解,输出左移的结果。

样例输入
6
12+13=1213
12+13=1312
12+13=25
12+13=12013
12+13=133
12+13=142

样例输出
2
-2
0
3
1
-1

AC代码

#include<stdio.h>
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		int a,b,c;
		scanf("%d+%d=%d",&a,&b,&c);
		int t=c,k=0;
		while(t!=0){//c的位数 
			t/=10;
			k++;
		}
		if(a+b==c)printf("0\n");
		else{
			int i,cnt=0,a1=a%10,b1=b%10,c1=c%10;
			if(c1==a1&&c1!=b1){//右移 
				for(i=0;i<k;i++){
					b*=10;
					cnt++;
					if(a+b==c)break;
				}
				printf("%d\n",-cnt);
			}
			
			else if(c1==b1&&c1!=a1){//左移 
				for(i=0;i<k;i++){
					a*=10;
					cnt++;
					if(a+b==c)break;
				}
				printf("%d\n",cnt);
			}
			else{
				int flag=0;
				int t1=a;
				for(i=0;i<k;i++){
				   	t1*=10;
					cnt++;
					if(t1+b==c){
						printf("%d\n",cnt);
						flag=1; 
						break;
					}
				}
				if(flag==0){
					cnt=0;
				for(i=0;i<k;i++){
				   	b*=10;
					cnt++;
					if(a+b==c){
						printf("%d\n",-cnt);
						break;
					}
				}
			}
			}
		}
	}
} 

解题思路:分三种情况讨论

1、c的尾数等于a的尾数

2、c的尾数等于b的尾数

3、c的尾数等于a,b的尾数

注意考虑a,b,c运算中的变化情况。

文章来源:https://blog.csdn.net/m0_75005390/article/details/134993397
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。