1)请编写htoi函数,其功能是将十六进制字符串转为十进制整数。
2)在主函数中输入一个十六进制字符串(长度不超过8个字符),调用上述函数计算此十六进制对应的十进制,最后在主函数中输出该函数的返回值。
注意:不要改变函数名称,注意大小写敏感。
输入
输入一个十六进制字符串,长度不超过8个字符。
输出
输出十进制整数。
输入示例1
f
输出示例1
15
输入示例2
a7
输出示例2
167
数据范围
输入为字符串,输出为int范围的整数
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main() {
char a[8]; //定义字符串
gets(a);
printf("%d",htoi(a)); //调用函数
return 0;
}
int htoi(char a[]){
int i,b,x;
int sum=0,pos;
for(i=0;i<strlen(a);i++){
if(a[i]=='a'){ //============================================================
b=10; //16进制中的特殊ABCDEF单独拎出来分支表示
}
else if(a[i]=='b'){
b=11;
}
else if(a[i]=='c'){
b=12;
}
else if(a[i]=='d'){
b=13;
}
else if(a[i]=='e'){
b=14;
}
else if(a[i]=='f'){
b=15;
}//=============================================================================
else if(a[i]=='0'){ // 从此处往下开始,其实完全可以用
b=0; // else {b=atoi(a[i])}代替
}
else if(a[i]=='1'){ //(atoi为将字符转为整形的函数)
b=1; //这里没用是因为我这么写的时候报错了
} //但是我觉的理论上没问题,应该是哪里出错了
else if(a[i]=='2'){
b=2;
}
else if(a[i]=='3'){
b=3;
}
else if(a[i]=='4'){
b=4;
}
else if(a[i]=='5'){
b=5;
}
else if(a[i]=='6'){
b=6;
}
else if(a[i]=='7'){
b=7;
}
else if(a[i]=='8'){
b=8;
}
else if(a[i]=='9'){
b=9;
}//==============================================================================
x=pow(16,strlen(a)-i-1);//16的 次幂
pos=x*b; //次幂乘以当前项
sum=sum+pos; //最后所有加和
}
return sum;
}
思路为一般思路,但是代码写的比较臃肿,解法不唯一,仅供参考