XTU-OJ 1214-A+B IV

题目描述

小明喜欢做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 

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;
}

你可能感兴趣的:(湘大OJ练习解析,算法,数据结构)