南邮 OJ 1595 确定进制
2015-08-06 09:53
309 查看
确定进制
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 442 测试通过 : 89
比赛描述
6+9 = 12 对于十进制来说是错误的,但是对于13进制来说是正确的。即,
6(13) + 9(13) = 12(13), 而 12(13)
= 1× 131 +
2 × 130 = 15(10)。你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16) 使得 p
+ q = r. 如果 B有很多选择, 输出最大的一个。如果没有合适的进制,则输出 0。
输入
输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1
<= p、q、r <= 1,000,000。
输出
对于每个测试样例输出一行。该行包含一个整数:即使得p
+ q = r成立的最大的B。如果没有合适的B,则输出 0。
样例输入
3
11 11 16
9 8 11
6 9 12
样例输出
0
16
13
提示
题目来源
NUPT
#include<iostream> using namespace std; int toBase(int k,int b){ int r=0,w=1; while(k){ r += k%10*w; k /= 10; w *= b; } return r; } int maxBit(int n){ int r=0,t; while(n){ t = n%10; n /= 10; if(r<t){ r = t; } } return r; } int main(){ int n,p,q,r,b,mb,t; scanf("%d",&n); while(n--){ scanf("%d%d%d",&p,&q,&r); mb = 2; if(mb<(t=maxBit(p))){ mb = t; } if(mb<(t=maxBit(q))){ mb = t; } if(mb<(t=maxBit(r))){ mb = t; } for(b=16; b>mb; b--){ if(toBase(p,b)+toBase(q,b)==toBase(r,b)){ break; } } if(b>mb){ printf("%d\n",b); }else{ printf("0\n"); } } }
相关文章推荐
- Linux nohup守护进程经验
- libpcap包过滤-pcap_compile()
- 高通:中国是未来5G发展关键---OFweek
- hdu 5352 MZL's City 2015多校联合训练赛#5 费用流
- jquery.form.js使用AJAX上传文件
- php中global与$GLOBAL['']的区别
- Java Vector遍历的五种方法
- 关于类的生命周期
- 南邮 OJ 1593 8皇后问题
- 排序算法
- POJ3667-Hotel-线段树区间合并(模板)
- 调试程序心得-1
- 工作注意事项
- 大数减小数求最大公约数
- 修改mysql用户密码及资源限制
- 南邮 OJ 1591 猴子选大王
- Java 并发专题 : Executor详细介绍
- 对象和类
- hdu4576 Robot (概率DP)
- 安装本地服务器