题目描述
小明喜欢做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
解题思路:计算 A + B,A*10相当于 A左移一位, B*10相当于 A右移一位,以此类推,最后相加时的和能与题目给的一样,乘了多少个10,就是移了多少位。详细思路参考代码。
AC代码:
#include <stdio.h>
int main()
{
int K,a,b,c,ai,bi,n;
scanf("%d",&K);
while ( K --)
{
scanf("%d+%d=%d",&a,&b,&c);
ai = a, bi = b, n = 0;
while ( ai <= c || bi <= c)
{
if (ai + b == c) // 优先输出左移解
{
printf("%d\n",n);
break;
}
if (a + bi == c)
{
printf("%d\n",-n);
break;
}
else
{
ai *= 10; // 左移一位相当于 a*10;
bi *= 10; // 右移一位相当于 b*10;
n ++;
}
}
}
return 0;
}
文章讲述了如何通过编程解决小明在做加法时忘记对齐的问题,利用乘10来表示移位,给出样例输入和输出,以及AC代码实现思路。
759

被折叠的 条评论
为什么被折叠?



