题目描述
给出若干个十进制数、八进制数、十六进制数,请你输出其中最大的一个数,并保留它在输入中的进制
当有多个数为最大时,请输出这些数中在输入中最早出现的一个
输入:
输入共有四行
第一行三个用空格隔开的十进制整数 x,y,z(1<=x,y,z<=100)分别代表十进制数、八进制数、十六进制数的个数
第二行x个用空格隔开的十进制数
第三行y个用空格隔开的八进制数
第四行z个用空格隔开的十六进制数,其中字母为小写英文字母
对所有给出的整数 a,0<=a<=10^8
输出:
输出一个整数代表最大值,保留这个数在输入时的进制
当有多个数为最大时,输出这些数中在输入中最早出现的一个
样例输入
2 1 1
123 456
24
34f
样例输出
34f
可以使用scanf()读取字符串的形式读取一个整数,然后使用strtol()函数把这个数字字符串转为对应的进制数,再逐个与后面输入的数比较,然后判断出最大值,最后打印结果即可。
代码如下:
参考链接:
https://www.bbsmax.com/A/q4zVAqD7dK/
#include <stdio.h>
#include <stdlib.h> // strtol()
#include <string.h> // strcpy()
int main(void){
int x,y,z;
int i,j,k;
char str[20],stemp[20]; // str用于存储输入的每个数字字符串,stemp用于存储数值最大的数字字符串
long int max,temp; // max 存储最大值,temp用于存储strtol()函数把字符串转为数值后的结果
scanf("%d%d%d",&x,&y,&z);
// 获取x个十进制数字,并计算最大值
for(i=0;i<x;i++){
scanf("%s",str); // 用字符串的形式读取一个整数
// https://www.bbsmax.com/A/q4zVAqD7dK/
temp = strtol(str,NULL,10); // 把这个字符串转为对应的十进制
if(i==0){ // 把第一个数默认设置为最大值,然后与后面输入的数再比较
max=temp;
strcpy(stemp,str);
}else{
if(max<temp){ // 如果输入的数比最大值大,则把这个数赋值给最大值max,并记录其输入时的进制字符串
max=temp;
strcpy(stemp,str);
}
}
}
// 获取y个八进制数,并计算最大值
for(j=0;j<y;j++){
scanf("%s",str);
// https://www.bbsmax.com/A/q4zVAqD7dK/
temp = strtol(str,NULL,8); // 把这个字符串转为对应的八进制
if(i==0&&j==0){ // 如果十进制数没有输入数,则把第一个输入的八进制数设置为最大值
max=temp;
strcpy(stemp,str);
}else{
if(max<temp){ // 如果输入的数比最大值大,则把这个数赋值给最大值max,并记录其输入时的进制字符串
max=temp;
strcpy(stemp,str);
}
}
}
// 获取z十六进制数,并计算最大值
for(k=0;k<z;k++){
scanf("%s",str);
// https://www.bbsmax.com/A/q4zVAqD7dK/
temp = strtol(str,NULL,16); // 把这个字符串转为对应的十六进制
if(i==0&&j==0&&k==0){ // 如果输入的十进制,八进制都没有输入数,则把第一个输入的十六进制数设置为最大值
max=temp;
strcpy(stemp,str);
}else{
if(max<temp){ // 如果输入的数比最大值大,则把这个数赋值给最大值max,并记录其输入时的进制字符串
max=temp;
strcpy(stemp,str);
}
}
}
// 如果有数据输入,则打印计算出的最大值
if(i!=0||j!=0||k!=0){
printf("%s\n",stemp);
}
return 0;
}