TZOJ:1208: 还是A+B

 描述

读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。

输入

测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。

输出

对每个测试用例输出1行,即A+B的值或者是-1。

样例输入

1 2 1
11 21 1
108 8 2
36 64 3
0 0 1

样例输出

3
-1
-1
100

 很简单的一道题,但也不能粗心大意,108 与 8 , k = 2也算相等哦.

#include 

using namespace std;

const int N = 2e5 + 10; // 无关,不要在意

int main()
{
    int a ,b ,k;
    int A[10] , B[10];
    while(cin >> a >> b >> k) // 多样例读取
    { 
        /* 退出条件以及初始化设置 */
        if(a == 0 && b == 0) break;
        int ans = a + b;
        int cnt1 = 0 , cnt2 = 0;
        
        /* 初始化为零! */
        memset(A, 0, sizeof A); 
        memset(B, 0, sizeof B);
         
        /* 读取位数,算个模版吧 */ 
        while(a)
        {
            A[cnt1 ++] = a % 10;
            a /= 10;
        }
        while(b)
        {
            B[cnt2 ++] = b % 10;
            b/= 10;
        }
        
        /* 从尾部判断 */
        bool f = true;
        int i = 0;
        while(k --)
        {
            if(A[i] != B[i]) {f = false ; break;}
            i ++;
        }
        
        /* 判断输出 */
        if(!f) cout << ans << endl;
        else cout << "-1" << endl;
    }
    
    return 0; // 好习惯捏
}

你可能感兴趣的:(算法)