题目1015:还是A+B
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:9411
解决:5643
-
题目描述:
-
读入两个小于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
-
答疑:
- 解题遇到问题?分享解题心得?讨论本题请访问: http://t.jobdu.com/thread-7739-1-1.html
-
- 思路:感觉这题没有什么难的,就是把要比较的二个数当做字符串输入,然后从后到前比较k个位数,如果有相等的直接输出“-1”;否则输出a+b的值。
- 代码如下:
-
-
#include<iostream> #include <cstring> #include <fstream> using namespace std; int main() { ifstream in; in.open("1.txt"); string stra,strb; int k; while(in>>stra>>strb>>k && stra[0]!='0' && strb[0]!='0') { int a=0; int b=0; int flag=0; int counta=stra.length()-1; int countb=strb.length()-1; for(int i=0;i<=counta;i++) a=a*10+stra[i]-'0'; for(int i=0;i<=countb;i++) b=b*10+strb[i]-'0'; while(k-- && counta>=0 && countb>=0)//比较k位内有无相等的位数 { if(stra[counta]==strb[countb]) { cout<<"-1"<<endl; flag=1; break; } --counta; --countb; } if(flag==0) //没有则返回二数相加的结果 cout<<a+b<<endl; } return 0; }
(2)找了个用整数数表示方式,逻辑还好。 -
-
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { int a, b, k; #ifndef ONLINE_JUDGE ifstream cin("d:\\OJ\\uva_in.txt"); #endif // ONLINE_JUDGE while (cin >> a >> b >> k) { if (a == 0 && b == 0) break; bool flag = true; int tmpa = a, tmpb = b; while (k--) { if (tmpa % 10 != tmpb % 10) { flag = false; break; } tmpa /= 10; tmpb /= 10; } if (flag) { cout << "-1" << endl; } else { cout << a + b << endl; } } return 0; }