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

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

输入格式:

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

输出格式:

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

输入样例:

213

输出样例:

39

#include<stdio.h>
#include<string.h>
#define N 100000
int KToD(char str[], int k);

int main(void)
{
    char str[N];
    int i,n,k,d,t=0,m,min;
    scanf("%s",str);
    /*下面判断最低进制,例如123不可能为2或3进制*/
    for(i=0; str[i]!='\0'; i++)
    {
    //因为含有字母,故分类讨论
        if(isalpha(str[i]))
        {
            switch(str[i])
            {
            case 'A':
                m=11;
                break;
            case 'B':
                m=12;
                break;
            case 'C':
                m=13;
                break;
            case 'D':
                m=14;
                break;
            case 'E':
                m=15;
                break;
            case 'F':
                m=16;
                break;
            }
            if(m>t)
                t=m;
        }
        else
        {
        if((str[i]-'0'+1)>t)
            t=str[i]-'0'+1;
        }
    }
    //将min先赋为最小进制得到的值
    min=KToD(str,t);
    for(i=t+1; i<=16; i++)
    {
        d=KToD(str,i) ;
        if(d<min)
            min=d;
    }
    printf("%d",min);
    return 0;
}
//进制转化函数
int KToD(char str[], int k)
{
    int d=0,i;
    for(i=0; str[i]!='\0'; i++)
    {
        if(isalpha(str[i]))
        {
            switch(str[i])
            {
            case 'A':
                d=d*k+10;
                break;
            case 'B':
                d=d*k+11;
                break;
            case 'C':
                d=d*k+12;
                break;
            case 'D':
                d=d*k+13;
                break;
            case 'E':
                d=d*k+14;
                break;
            case 'F':
                d=d*k+15;
                break;
            }
        }
        else
            d=d*k+(str[i]-'0');//其中 (str[i]-'0')将字符转化为数字
    }
    return d;
}



以前心态:遇到进制转换都直接跳
现在心态:做完进制题后,我行了!!
任意进制转换还不会捏ԅ(¯﹃¯ԅ)
大佬们不但能ak,还代码简单,TQL

总结:

无非每次循环乘以进制后再加上该位数字

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kk_阿白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值