#P1071. A+B problem

A+B problem

大意: 你以为这只是简单的两个数相加?不不不,事情远没有那么简单!你需要处理一些更复杂的情况,甚至还涉及到进制转换、大数计算、错误输入处理等。真正考验你的编程思维和对细节的把控能力。

要求:

  1. 输入格式:

    • 输入包含两行,每行是一个正整数或负整数,整数的范围可以非常大(例如超过 10^100 位)。
    • 输入的两个整数可以是十进制、二进制或十六进制。输入的数以不同的前缀表示其进制:0b 表示二进制,0x 表示十六进制,其他情况为十进制。
  2. 计算规则:

    • 你需要将输入的数转换为十进制后进行加法运算,并输出结果。
    • 如果输入不合法(例如输入的数字含有非进制内的符号),输出“非法输入”。
  3. 输出格式:

    • 输出一行,表示相加后的结果,要求按十进制输出。

具体要求:

  1. 输入解析:解析输入的进制类型,进行必要的转换。
  2. 大数处理:由于数字可能非常大,你不能使用普通的整型数据类型,必须借助 std::string 处理大数。
  3. 异常处理:如果输入格式错误或无法解析,程序应能够优雅地处理错误并输出“非法输入”。
  4. 加法实现:手动实现大数相加的逻辑,而不是依赖内置的加法运算符。

示例输入1:

0b1101
0xF

示例输出1:

28

示例输入2:

123456789123456789123456789
987654321987654321987654321

示例输出2:

1111111111111111111111111110

示例输入3:

12345
0xZ12

示例输出3:

非法输入

提示:

  • 你需要自行处理二进制、十六进制和十进制的转换。
  • 手动实现大数相加的逻辑时,建议逐位相加,注意处理进位。
  • 充分考虑异常情况的处理,例如输入非法字符时的情况。