题解报告:hdu 1229 还是A+B

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1229

Problem Description

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

Input

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

Output

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

Sample Input

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

Sample Output

3
-1
-1
100

解题思路:这道题的意思就是给你两个数以及K个位数,让你从右往左依次比较,如果K是小于这两个数中最大位数的,依次比较相同则输出-1,不同就计算两个数的和,如果K大于给定有效(最大)位数,则按实际的位数来比较,规则相同,简单AC。

AC代码:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5 
 6     int A,B,K,m,n,h,g,y;
 7     while(cin>>A>>B>>K&&(A+B)){
 8         m=A,n=B,y=K,h=0,g=1;//分别记录输入的三个值,g是来记录两个数中位数最多的一个
 9         while((y--)&&(n||m)){//判断K的同时判断是否超过位数,都为0就没必要再除下去了
10             if((m%10)==(n%10))++h;//看尾数相同的加1
11             m/=10,n/=10;//除去尾数
12             if(m||n)++g;//判断两个数的最大位数,
13         }
14         if(K>g)K=g;//保持比较的是有效位数,超过最大位数按实际有效数字来比较
15         if(h==K)cout<<"-1"<<endl;
16         else cout<<(A+B)<<endl;
17     }
18     return 0;
19 }
原文地址:https://www.cnblogs.com/acgoto/p/8472067.html