#P1546. Basically Speaking
Basically Speaking
题目描述
Really Neato计算器公司最近聘请您的团队协助设计其Super Neato Model I计算器。作为计算机科学家,您向公司建议,若新计算器能实现数制转换将非常实用。公司认为这是个绝妙的主意,并要求您的团队开发用于进制转换的原型程序。Super Neato Model I计算器的项目经理告知您,该计算器将具备以下实用功能:
- 7位数字显示屏
- 按键包括大写字母A-F(对应10-15)以及数字0-9
- 支持2到16进制之间的转换
输入格式
原型程序的输入每行表示一次进制转换,每行包含三个数:
- 第一个数是待转换的数字(原进制)
- 第二个数是原进制基数
- 第三个数是目标进制基数
- 数字之间由一个或多个空格分隔
- 输入包含多行,程序应持续读取直到文件末尾
输出格式
输出仅为转换后的数字(按计算器显示屏显示格式),需右对齐至7位显示区域。若数字过大无法显示,则输出“ERROR”(无引号)并右对齐至7位。
输入数据1
1111000 2 10
1111000 2 16
2102101 3 10
2102101 3 15
12312 4 2
1A 15 2
1234567 10 16
ABCD 16 15
输出数据1
120
78
1765
7CA
ERROR
11001
12D687
D071
来源
Mid-Central USA 1995
关键概念注释
- 数制范围:原进制和目标进制均为2-16,其中10-15用A-F表示
- 右对齐规则:
- 转换结果长度≤7时,左侧补空格至7位
- 结果长度>7时输出"ERROR"(固定7字符)
- 数值有效性:
- 输入数字在原进制下需合法(如八进制数不含8-9)
- 转换后结果需能在7位内显示(2^7=128种状态,最大可表示16^7-1=268435455)
解题要点提示
-
进制转换流程:
原进制数 → 十进制 → 目标进制数
(注:直接进制转换可能更高效,但十进制作为中间表示更易实现) -
关键步骤:
- 解析输入字符串并验证原进制合法性
- 原进制数转十进制(大数运算需用字符串处理)
- 十进制转目标进制(除基取余法,注意字母表示)
- 检查结果长度是否≤7,按规则输出
示例解析(以输入行"1111000 2 16"为例)
- 原进制转十进制:
1×2⁶ + 1×2⁵ + 1×2⁴ + 1×2³ + 0×2² + 0×2¹ + 0×2⁰ = 64+32+16+8=120 - 十进制转十六进制:
120 ÷ 16 = 7 余 8 → 十六进制表示为78 - 输出格式:
长度2,右对齐补5个空格 → " 78"