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; }
害怕失败的人,已经是一个loser!