快放假了,来个简单一点的题。
递归把十六进制(字符串表示)转换称十进制数。例如:"1f"就输出31。
关键就是要求出当前要处理的位应该对应的指数,可以用当前位置和字符串的长度来求出。例如,表示十六进制的字符串有3个字符,那么第一个字符处于0位置,对应的指数应该是3-0-1=2,应为最低位对应的指数是0嘛。
递归的终止条件就应该是判断出当前位置已经是末尾了。
unsigned long hex2decimal(char * strHex, int nSt, int nEd)
{
char chDigit= *(strHex+nSt);
int nDigit = 0;
if(nSt<=nEd)
{
if ((chDigit>='a')&&(chDigit<='f'))
{
nDigit = chDigit - 'a' + 10;
}
else if ((chDigit>='A')&&(chDigit<='F'))
{
nDigit = chDigit - 'A' + 10;
}
else if ((chDigit>='0')&&(chDigit<='9'))
{
nDigit = chDigit - '0';
}
int npower = nEd-nSt-1;
unsigned long nResult = 1;
for(;(npower>=0);npower--)
{
nResult = nResult*16;
}
nResult = nResult*nDigit + hex2decimal(strHex, nSt+1, nEd);
return(nResult);
}
else
return(0);
}