输入一个字符串,它可能是2--16进制数中一种进制数的表示,计算它对应的10进制数可能的最小值。例如,“151”可以是6--16进制中任何一种进制数的表示。
对应的10进制数可能的最小值就是67,也就是把它当成6进制。
输入格式:
输入一行字符串,仅由‘0’--‘9’和‘A'--'F'这些字符组成,保证转换后对应的10进制数在int范围内。
输出格式:
输出一个整数,为字符串对应10进制数可能的最小值。
输入样例:
213
输出样例:
39
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
- 在主函数中,首先输入的字符串。
- 定义一个函数
getVal
,用于获取字符对应的数值。如果字符在'0'到'9'之间,则返回字符对应的数值;如果字符在'A'到'F'之间,则返回字符对应的数值(10到15)。 - 然后定义一个函数
getMax
,用于获取字符串中的最大字符对应的数值。遍历字符串的每个字符,通过调用getVal
函数获取字符对应的数值,并与当前最大值进行比较,更新最大值。 - 接下来定义了一个函数
strToDec
,用于将字符串按照指定的进制转换为10进制数值。遍历字符串的每个字符,通过调用getVal
函数获取字符对应的数值,并根据进制数进行计算,累加得到最终的10进制数值。 - 然后在主函数中调用
getMax
函数获取最大字符对应的数值,并将其加1得到可能的最小进制数。 - 最后在主函数中调用
strToDec
函数将字符串按照最小进制数转换为10进制数值,并输出结果。
代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 获取字符对应的数值
int getVal(char c){
if(c >= '0' && c <= '9')
return (int)c - '0';
else
return (int)c - 'A' + 10;
}
// 获取字符串中的最大字符对应的数值
int getMax(char* str){
int maxVal = 0;
for(int i = 0; i < strlen(str); i++){
int val = getVal(str[i]);
if(val > maxVal)
maxVal = val;
}
return maxVal;
}
// 将字符串按照base进制转换为10进制数值
int strToDec(char* str, int base){
int decVal = 0;
for(int i = 0; i < strlen(str); i++){
decVal = decVal * base + getVal(str[i]);
}
return decVal;
}
int main(){
char str[50];
scanf("%s", str);
int base = getMax(str) + 1; // 最小可能的进制数
printf("%d\n", strToDec(str, base));
return 0;
}