HtoI
十六进制转为整型
初步算法思路:(简易版)
1 输入一行字符串,如果存在以'0x’或'0X’开头的字符串,则认为找到合法的十六制输入,得到新的字符串
例如:输入:0xabd 得到:abd
2 根据得到的新的字符串,按照十六进制和整型的转化规则进行转化
即:abd--->10 11 13
并分析abd,从右向左分别为0,1,2
写一个power()函数,用于进行幂运算
#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"
#define MaxLen 1000
#define Yes 1
#define No 0
int isdigital(char c)
{
if((c>='0')&&(c<='9'))
{
return 1;
}
else
{
return 0;
}
}
int isalph_h(char c)
{
if(((c>='a')&&(c<='f')) ||((c>='A')&&(c<='F')))
{
return 1;
}
else
{
return 0;
}
}
double power(int n,int i)
{
double s=1;
int num;
if(i==0)
{
s=1;
}
else
{
for(num=1;num<=i;num++)
{
s=s*n;
}
}
return s;
}
int atoi(char s)
{
int n;
if(isdigital(s))
{
n=s-'0';
}
if((s>='a')&&(s<='f'))
{
n=s-'a'+10;
}
if((s>='A')&&(s<='F'))
{
n=s-'A'+10;
}
return n;
}
int * FormatString(char string[],int limit)
{
int c;
int i;
int result[MaxLen];
i=0;
while(i<limit-1&&(c=getchar())!=EOF&&c!='\n')
{
string[i]=c;
++i;
}
int m=i;
int t=1;
int state=No;
for(i=0;i<=m;i++)
{
char temp;
temp=string[i];
if(isdigital(temp)||isalph_h(temp))
{
if(state==No)
{
if((string[i]=='0')&&(string[i+1]=='x'||string[i+1]=='X'))
{
//result[t]=temp;
state=Yes;
}
}
else if(temp!='x'&&temp!='X')
{
result[t]=atoi(temp);
t++;
}
}
}
if(t==1)
{
result[0]=0;
}
else
{
result[0]=t-1;
result[t]=0;
}
return result;
}
void main()
{
int c;
int *H;
char temp;
int i,j;
int s=0;
int num;
char str[MaxLen];
H=FormatString(str,MaxLen);
num=H[0];
for(j=1,i=num-1;i>=0;i--,++j)
{
s=s+H[j]*power(16,i);
}
printf("十六进制转为整型的值为:%d",s);
system("pause");
}