小韦老师@神犇营-my0054-最高价格
题目:
描述
码猿星球要举行一场拍卖会,汇聚了来自各个星球的人。这是一件好事情,但是有个麻烦的问题,那就是不同星球的人使用的数字进制不同,在叫价的时候都按各自星球习惯使用的数字进制叫价,而作为拍卖主持人的小码猿只会十进制的数字,他不知道怎么样比较大家出的价格,于是请你写一个程序帮助它判断最高价是多少,并告诉它对应的十进制数字。
输入
一行内依次给出 3 个数字,分别为 2 进制, 8 进制,16 进制,三个数中间用空格隔开。每个数字的长度是相同的,都是 4 位。
输出
最高价格对应的十进制数。
输入样例1
1101 0017 000E
输出样例1
15
题解:
破题:
把四位的二进制数,八进制数,十六进制数转成十进制数,然后输出这三个十进制数中的最大值。
思路:
因为十六进制数有字母,所以不能用整数类型的变量来存储输入的数,要用字符类型的变量来存储输入的数。
定义 4 个 char 类型的变量 c1, c2, c3, c4,用来存储输入的数据;然后在定义 4 个 int 型的变量 n1, n2, n3, n4,用来存储每一位对应的数字;再定义两个 int 型的变量 num 和 Max,分别用来存储十进制数和最大值,并且都初始化为 0。
char c1, c2, c3, c4;
int n1, n2, n3, n4, num = 0, Max = 0;
现在来处理二进制数,将二进制数转成十进制数(码权积累和),并且将该数存到 Max 中:
cin >> c1 >> c2 >> c3 >> c4;
// 取得每一个码
n1 = c1 - '0';
n2 = c2 - '0';
n3 = c3 - '0';
n4 = c4 - '0';
num = 0;
num += n1 * pow(2, 3);
num += n2 * pow(2, 2);
num += n3 * pow(2, 1);
num += n4 * pow(2, 0);
// 将十进制数存到 Max 中
Max = num;
现在来处理八进制数,将八进制数转成十进制数(码权积累和),并且将较大者存到 Max 中:
cin >> c1 >> c2 >> c3 >> c4;
// 取得每个码
n1 = c1 - '0';
n2 = c2 - '0';
n3 = c3 - '0';
n4 = c4 - '0';
num = 0;
num += n1 * pow(8, 3);
num += n2 * pow(8, 2);
num += n3 * pow(8, 1);
num += n4 * pow(8, 0);
// 将较大者存在 Max 中
Max = (Max >= num)? Max : num;
现在来处理十六进制数,将十六进制数转成十进制数(码权积累和),并且将较大者存到 Max 中:
cin >> c1 >> c2 >> c3 >>c4;
// 取得每个码
n1 = (c1 >= '0' && c1 <= '9')? (c1 - '0') : (c1 - 'A' + 10);
n2 = (c2 >= '0' && c2 <= '9')? (c2 - '0') : (c2 - 'A' + 10);
n3 = (c3 >= '0' && c3 <= '9')? (c3 - '0') : (c3 - 'A' + 10);
n4 = (c4 >= '0' && c4 <= '9')? (c4 - '0') : (c4 - 'A' + 10);
num = 0;
num += n1 * pow(16, 3);
num += n2 * pow(16, 2);
num += n3 * pow(16, 1);
num += n4 * pow(16, 0);
// 将较大者存在 Max 中
Max = (Max >= num)? Max : num;
最后将 Max 输出即可。
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
char c1, c2, c3, c4;
int n1, n2, n3, n4, num = 0, Max = 0;
// 处理二进制数
cin >> c1 >> c2 >> c3 >> c4;
// 取得每个码
n1 = c1 - '0';
n2 = c2 - '0';
n3 = c3 - '0';
n4 = c4 - '0';
num = 0;
num += n1 * pow(2, 3);
num += n2 * pow(2, 2);
num += n3 * pow(2, 1);
num += n4 * pow(2, 0);
// 将十进制数存在 Max 中
Max = num;
// 处理八进制数
cin >> c1 >> c2 >> c3 >> c4;
// 取得每个码
n1 = c1 - '0';
n2 = c2 - '0';
n3 = c3 - '0';
n4 = c4 - '0';
num = 0;
num += n1 * pow(8, 3);
num += n2 * pow(8, 2);
num += n3 * pow(8, 1);
num += n4 * pow(8, 0);
// 将较大者存在 Max 中
Max = (Max >= num)? Max : num;
// 处理十六进制数
cin >> c1 >> c2 >> c3 >>c4;
// 取得每个码
n1 = (c1 >= '0' && c1 <= '9')? (c1 - '0') : (c1 - 'A' + 10);
n2 = (c2 >= '0' && c2 <= '9')? (c2 - '0') : (c2 - 'A' + 10);
n3 = (c3 >= '0' && c3 <= '9')? (c3 - '0') : (c3 - 'A' + 10);
n4 = (c4 >= '0' && c4 <= '9')? (c4 - '0') : (c4 - 'A' + 10);
num = 0;
num += n1 * pow(16, 3);
num += n2 * pow(16, 2);
num += n3 * pow(16, 1);
num += n4 * pow(16, 0);
// 将较大者存在 Max 中
Max = (Max >= num)? Max : num;
// 输出结果
cout << Max;
return 0;
}