题目1015:还是A+B
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:9507
解决:5701
-
题目描述:
-
读入两个小于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://ac.jobdu.com/problem.php?pid=1015
-
问题分析:题目关键是根据K对A,B,的后K位进行判断是否相等,可以利用余数操作来实现对A,B的后K位进行分解出来。
-
代码实现:
-
#include <iostream> #include<stdio.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ using namespace std; int A,B,k; int main(int argc, char *argv[]) { while(scanf("%d %d %d",&A,&B,&k)){ int ans=-1; int a=A,b=B; //1.判断后k位是否相同 while(k--) { int p1=a%10; a/=10; int p2=b%10; b/=10; if(p1 != p2){ ans=A+B; break; } } cout<<ans; } return 0; }
-
算法分析:时间复杂度为O(K)。空间复杂度为O(2);考虑优化可以增加一个条件:当a,b都为0时即可结束while判断,即K大于A或B的位数的情况。