#P1546. Basically Speaking

    ID: 547 传统题 1000ms 256MiB 尝试: 3 已通过: 1 难度: 3 上传者: 标签>字符串其他数学难度普及-Mid-Central USA 1995

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)

解题要点提示

  1. 进制转换流程
    原进制数 → 十进制 → 目标进制数
    (注:直接进制转换可能更高效,但十进制作为中间表示更易实现)

  2. 关键步骤

    • 解析输入字符串并验证原进制合法性
    • 原进制数转十进制(大数运算需用字符串处理)
    • 十进制转目标进制(除基取余法,注意字母表示)
    • 检查结果长度是否≤7,按规则输出

示例解析(以输入行"1111000 2 16"为例)

  1. 原进制转十进制
    1×2⁶ + 1×2⁵ + 1×2⁴ + 1×2³ + 0×2² + 0×2¹ + 0×2⁰ = 64+32+16+8=120
  2. 十进制转十六进制
    120 ÷ 16 = 7 余 8 → 十六进制表示为78
  3. 输出格式
    长度2,右对齐补5个空格 → " 78"