九度OJ:题目1015 还是A+B
2016-03-12 12:29
281 查看
题目描述:
读入两个小于10000的正整数A和B,计算A+B。需要注意的是:如果A和B的末尾K(不超过8)位数字相同,请直接输出-1。
输入:
测试输入包含若干测试用例,每个测试用例占一行,格式为"A B K",相邻两数字有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即A+B的值或者是-1。
样例输入:
样例输出:
[解题思路]
1.理清楚题目的思路:判断a,b的末尾k位是否相同(如1234与3234的末尾三位是相同的,而末尾四位是不相同的);
2.找到解决题目的入口:比如要判断1234与3234的末尾三位是否相同,只需要判断((1234)%1000(是否)==(3234)%1000)即可,这个思路比较简单
在论坛看到一种位运算的思想来解决这个问题,如下:
a|(-1<<k)=11111...1xyzw
b|(-1<<k)=11111...1mnpq
所以这种判断方法是不正确的,只能判断a与b二进制的后k位是否相同而不是a与b的后k位,比如12与28的后2位就不能通过:
![](https://img-blog.csdn.net/20160312125143689?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
所以该题目解决方法为:
#include <stdio.h>
#include<math.h>
int a,b,k;
int main()
{
while(scanf("%d %d %d",&a,&b,&k)&&a&&b)
{
k=pow(10,k);
if(a%k==b%k){
printf("-1\n");
}
else printf("%d\n",a+b);
}
return 0;
}[题目网站]
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 -1100
[解题思路]
1.理清楚题目的思路:判断a,b的末尾k位是否相同(如1234与3234的末尾三位是相同的,而末尾四位是不相同的);
2.找到解决题目的入口:比如要判断1234与3234的末尾三位是否相同,只需要判断((1234)%1000(是否)==(3234)%1000)即可,这个思路比较简单
在论坛看到一种位运算的思想来解决这个问题,如下:
<span style="font-size:14px;"> if((a|(-1<<k))==(b|(-1<<k))){ printf("-1\n"); } else printf("%d\n",a+b);</span>如上代码,现在一般是32位的,则[-1](二进制表示)=1111111111....11111(32个1),则-1<<k位既将1111111111....11111(32个1)的右边k为置为0,假如k=4,则-1<<k=11111.....10000,|是位运算或,则有a|(-1<<k)=11111...1xyzw(xyzw为a的二进制数后四位),可知:
a|(-1<<k)=11111...1xyzw
b|(-1<<k)=11111...1mnpq
所以这种判断方法是不正确的,只能判断a与b二进制的后k位是否相同而不是a与b的后k位,比如12与28的后2位就不能通过:
所以该题目解决方法为:
#include <stdio.h>
#include<math.h>
int a,b,k;
int main()
{
while(scanf("%d %d %d",&a,&b,&k)&&a&&b)
{
k=pow(10,k);
if(a%k==b%k){
printf("-1\n");
}
else printf("%d\n",a+b);
}
return 0;
}[题目网站]
http://ac.jobdu.com/problem.php?pid=1015
相关文章推荐
- 【PAT】1049. 数列的片段和(20)
- event 事件 坐标兼容
- 杂记_2015.06.15
- VS2010+Directshow调用摄像头并显示
- 说说Linux文件权限那些事儿
- java解析xml
- 实验0
- 题目3
- 控制与失控--论传统组织结构与新兴结构异同
- IOS开发随笔2
- 70行代码写个带界面的windows迷你FTP服务器
- java list中的对象去重原理
- 构建之法阅读笔记01
- 从C/C++到Objective-C(四)--- 属性的使用
- 解决ScrollView嵌套ListView的问题
- CodeForces 618A(观察样例--找规律)
- CodeForces 611B New Year and Old Property(模拟)
- 杭电2802
- gzip格式解压缩
- 树形DP—依赖背包模板