百炼OJ 2972:确定进制
来源:互联网 发布:北电网络交换 编辑:程序博客网 时间:2024/06/03 15:58
2972:确定进制
- 查看
- 提交
- 统计
- 提示
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
- 6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16) 使得 p * q = r. 如果 B有很多选择, 输出最小的一个。例如: p = 11, q = 11, r = 121. 则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 31 + 1 * 30 = 4(10) 和 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10)。 对于进制 10,有 11(10) * 11(10) = 121(10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。
- 输入
- 输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1 <= p、q、r <= 1,000,000。
- 输出
- 对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。
- 样例输入
36 9 4211 11 1212 2 2
- 样例输出
1330
- 来源
- Taejon 2002, POJ 1331, 程序设计实习07
- 解题思路,没有什么特殊的技巧,要注意的是pqr三个数的每个数的每一位必须比当前进制k要小。
#include <stdio.h>#include <ctype.h>#include <string.h>int pow(int n, int z){ int ans = 1; while(z --) { ans *= n; } return ans;}int Decimal(int num, int d){ int ans = 0, i = 0, c; while(num > 0) { c = num % 10; if(c >= d) return -1; ans += c * pow(d, i); num /= 10, i ++; } return ans;}int main(){ int n, i; int p, q, r; scanf("%d", &n); while(n --) { scanf("%d%d%d", &p, &q, &r); for (i = 2; i < 17; i ++) { int s1 = Decimal(p, i); if(s1 == -1) continue; int s2 = Decimal(q, i); if(s2 == -1) continue; int s3 = Decimal(r, i); if(s3 == -1) continue; if(s1 * s2 == s3) { printf("%d\n", i); break; } } if(i == 17) { printf("0\n"); } } return 0;}
0 0
- 百炼OJ 2972:确定进制
- POJ百炼-2972-确定进制
- 百炼-2972-确定进制-C语言-数制转换
- 百练OJ:2972: 确定进制
- 百炼OJ 2801:填词
- 2706:麦森数 百炼oj
- 百炼OJ:2801:填词
- 南邮 OJ 1595 确定进制
- 百炼OJ 1657:Distance on Chessboard
- 百炼OJ 1017:装箱问题
- 百炼OJ 2973:Skew数
- 百炼OJ 2742:统计字符数
- 百炼OJ 2744 子串
- 1017:装箱问题 百炼oj
- 百炼OJ:4146:数字方格
- 2811:熄灯问题 百炼oj
- POJ 百练 2972: 确定进制
- 百练 2972 确定进制
- linux 脚本的开发步骤
- ThreadLocal深入理解 修订版
- 1602液晶显示屏
- 面向站长和网站管理员的Web缓存加速指南
- 通俗讲解:缓存、缓存算法和缓存框架
- 百炼OJ 2972:确定进制
- 浏览器部分补充
- 基于html5、JS实现的拍照上传图片
- 压缩感知应用FAQ
- QT学习 之 对话框 (三) 标准颜色对话框
- Two Sum
- Ubuntu12.04安装Storm0.9.3
- 程序内存分配 堆栈
- 关于新版ADT创建项目时出现appcompat_v7的问题