链接添加链接描述
描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在
1≤n≤2^31−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:
0xAA
输出:
170
直接输入法
直接%x输入16进制的数字,10进制输出即可。
字符串转换方法
将输入的16进制存入到一个字符串,判断字符串的范围,如果范围处于A-F,就将字符串减去32,减去0的ASCII码,在减去7得到对应的数字,如果范围处于a-f,减去0的ASCII码,如果就是数字就减掉0的ASCII码即可,最后做相乘
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <math.h>
int mypow(int ds,int zs)
{
int sum=1,i=0;
if(zs==0)
{
sum*=1;
}else{
for(i=0;i<zs;i++)
{
sum=sum*ds;
}
}
return sum;
}
int main() {
char *s=(char *)malloc(10*sizeof(char));
int len,i,j=0,sum=0;
//gets(s);
scanf("%s",s);
len=strlen(s);
for(i=len-1;i>1;i--)
{
if(s[i]>='a'&&s[i]<='f')
{
s[i]=s[i]-32-'0'-7;
sum=sum+s[i]*mypow(16,j);
j++;
}
else if(s[i]>='A'&&s[i]<='F'){
s[i]=s[i]-'0'-7;
sum=sum+s[i]*mypow(16,j);
j++;
}else{
s[i]=s[i]-'0';
sum=sum+s[i]*mypow(16,j);
j++;
}
}
printf("%d\n",sum);
}