主题:[讨论]这个面试问题,真变态
这是一段把16进制数字,转化成十进制的函数。面试题要求。
第一,提高可读性。
第二,把程序修改到尽可能最短,但是不能用scanf和strtol函数
第三,把程序修改到运行速度尽可能快。
真郁闷啊。[em19]
大家都来讨论一下吧。
typedef unsigned char UB;
int atox8( char hex[] )
{
int cnt = 0;
int len = strlen( hex );
UB num = 0;
int total = 0;
for( cnt = 0; cnt < len; cnt++ )
{
if (!(isxdigit(hex[cnt]))) { return -1; }
if( ( hex[cnt] >= '0' ) && ( hex[cnt] <= '9' ) )
{
num = hex[cnt] - '0';
}
else if( ( hex[cnt] >= 'a' ) && ( hex[cnt] <= 'f' ) )
{
num = hex[cnt] - 'a' + 10;
}
else
{
num = hex[cnt] - 'A' + 10;
}
total *= 0x10;
total += num;
}
return total;
}[em1][em1][em1][em1][em1][em1][em1][em1][em1][em1][em1]
第一,提高可读性。
第二,把程序修改到尽可能最短,但是不能用scanf和strtol函数
第三,把程序修改到运行速度尽可能快。
真郁闷啊。[em19]
大家都来讨论一下吧。
typedef unsigned char UB;
int atox8( char hex[] )
{
int cnt = 0;
int len = strlen( hex );
UB num = 0;
int total = 0;
for( cnt = 0; cnt < len; cnt++ )
{
if (!(isxdigit(hex[cnt]))) { return -1; }
if( ( hex[cnt] >= '0' ) && ( hex[cnt] <= '9' ) )
{
num = hex[cnt] - '0';
}
else if( ( hex[cnt] >= 'a' ) && ( hex[cnt] <= 'f' ) )
{
num = hex[cnt] - 'a' + 10;
}
else
{
num = hex[cnt] - 'A' + 10;
}
total *= 0x10;
total += num;
}
return total;
}[em1][em1][em1][em1][em1][em1][em1][em1][em1][em1][em1]