7-286 输入一个字符串转换成十进制整数

输入一个字符串,它可能是2--16进制数中一种进制数的表示,计算它对应的10进制数可能的最小值。例如,“151”可以是6--16进制中任何一种进制数的表示。
对应的10进制数可能的最小值就是67,也就是把它当成6进制。

输入格式:

输入一行字符串,仅由‘0’--‘9’和‘A'--'F'这些字符组成,保证转换后对应的10进制数在int范围内。

输出格式:

输出一个整数,为字符串对应10进制数可能的最小值。

输入样例:

213

输出样例:

39

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

思路

  1. 在主函数中,首先输入的字符串。
  2. 定义一个函数getVal,用于获取字符对应的数值。如果字符在'0'到'9'之间,则返回字符对应的数值;如果字符在'A'到'F'之间,则返回字符对应的数值(10到15)。
  3. 然后定义一个函数getMax,用于获取字符串中的最大字符对应的数值。遍历字符串的每个字符,通过调用getVal函数获取字符对应的数值,并与当前最大值进行比较,更新最大值。
  4. 接下来定义了一个函数strToDec,用于将字符串按照指定的进制转换为10进制数值。遍历字符串的每个字符,通过调用getVal函数获取字符对应的数值,并根据进制数进行计算,累加得到最终的10进制数值。
  5. 然后在主函数中调用getMax函数获取最大字符对应的数值,并将其加1得到可能的最小进制数。
  6. 最后在主函数中调用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;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾乃宇宙欠债王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值