【九度OJ】题目1015:还是A+B 解题报告

标签(空格分隔): 九度OJ


​http://ac.jobdu.com/problem.php?pid=1015​

题目描述:

读入两个小于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

Ways

一遍AC的滋味太爽了哈哈哈~

这个题,我的第一感觉要用数位拆解,一位一位的比较,后面k位是否相同。但是这样挺麻烦的,因为a,b的数位可能不同,就要考虑是否数位已经用完等等问题,很麻烦。

但是转念一想,我直接求余不就行了吗,这样得到的就是后面几位的数字,而且即使后面的k位数字的领头数字为0也不要紧,因为放到int里自动去掉了。

这样实现起来就很简单了。

我用的是10的幂的形式,也可以写个循环不断的*10,得到求余所用的数字。

#include <stdio.h>
#include <math.h>

int main() {
int a, b, k;
while (scanf("%d%d", &a, &b) != EOF && a != 0 && b != 0) {
scanf("%d", &k);
int a_ = a % ((int) pow(10, k));
int b_ = b % ((int) pow(10, k));
if (a_ == b_) {
printf("-1\n");
} else {
printf("%d\n", a + b);
}
}
return 0;
}

Date

2017 年 3 月 5 日