小韦老师@神犇营-my0054-最高价格

小韦老师@神犇营-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;
}

猜你喜欢

转载自blog.csdn.net/qq_31790997/article/details/91355902