问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
位权展开法转换为十进制
位权展开法:每一位的数符×该位的权值,将所有的乘式相加即可。
位权:数制中每一固定位置对应的单位值成为位权。十六进制数的位权为16.
代码如下:
#include <iostream>
using namespace std;
#include<stdio.h>
#include<string.h>
#include<math.h>
int getN(char s)
{
char t;
switch(s)
{
case '0':t=0;break;
case '1':t=1;break;
case '2':t=2;break;
case '3':t=3;break;
case '4':t=4;break;
case '5':t=5;break;
case '6':t=6;break;
case '7':t=7;break;
case '8':t=8;break;
case '9':t=9;break;
case 'A':t=10;break;
case 'B':t=11;break;
case 'C':t=12;break;
case 'D':t=13;break;
case 'E':t=14;break;
case 'F':t=15;break;
}
return t;
}
int main()
{
char s[9];
gets(s);
int i;
long long sum=0;
for(i=strlen(s)-1;i>=0;i--)
{
int num=getN(s[i]);
sum+=num*pow(16,strlen(s)-i-1);
}
cout<<sum<<endl;
return 0;
}