您的位置:首页 > 理论基础 > 计算机网络

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

2016-03-30 14:43 267 查看
第一部分:题目

题目描述 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: