请问这个应该怎么做,没什么思路,求解答

题目描述
给出若干个十进制数、八进制数、十六进制数,请你输出其中最大的一个数,并保留它在输入中的进制

当有多个数为最大时,请输出这些数中在输入中最早出现的一个

输入:
输入共有四行

第一行三个用空格隔开的十进制整数 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;
} 

img