题目链接: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 }