1475 m进制转十进制——http://codevs.cn/problem/1475/

第一部分:题目

题目描述 Description

将m进制数n转化成一个十进制数 m<=16

题目保证转换后的十进制数<=100

输入描述 Input Description

共一行

n和m

输出描述 Output Description

共一个数

表示m进制的n化成十进制的数

样例输入 Sample Input

1010 2

样例输出 Sample Output

10

 

第二部分:思路

举例:(1010)2=1*2^3+0*2^2+1*2+0*2^0=(((1*2+0)*2+1)*2+0)*1.

把n存入到字符串数组中,逐一乘m求和,注意字符的问题:因为题目没有说字母大写还是小写。这里以大写为例:A,B,C,D,E,F分别对应10,11,12,13,14,15.

当然,根据进制的定义,最后一位其实是乘m的0次方。所以最后一个字符不乘。

第三部分:代码

#include<stdio.h>
#include<string.h>
int main()
{
    int m,sum=0,i,len;
    char s[10];
    scanf("%s %d",s,&m);//这里需要稍微注意,因为scanf不接收空格以及回车,所以这样一步就把空格两边的值赋给了数组s,和整数m.
    len=strlen(s);//获取字符长度
    for(i=0;i<len;i++)
    {
        switch(s[i])//对当前进制的每一位数值进行判断
        {
            case 'F':
            case 'f':
                {
                    sum+=15;
                    break;
                }
            case 'E':
            case 'e':
                {
                    sum+=14;
                    break;
                }
            case 'D':
            case 'd':
                {
                    sum+=13;
                    break;
                }
            case 'C':
            case 'c':
                {
                    sum+=12;
                    break;
                }
            case 'B':
            case 'b':
                {
                    sum+=11;
                    break;
                }
            case 'A':
            case 'a':
                {
                    sum+=10;
                    break;
                }
            default:
                {
                    sum+=s[i]-'0';
                }
        }
        if(i<len-1)//最后一位乘1.
        {
            sum*=m;
        }
    }
    printf("%d\n",sum);
    return 0;
}

 

posted @ 2016-03-30 14:43  喝醉的香锅锅  阅读(203)  评论(0编辑  收藏  举报