问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
思路
这是一道比较简单的题目,输入作为字符串处理,然后对每一位计算权值累加即可得到对应十进制数。
坑
本题中提示,不超过八位数。也就是说FFFFFFFF是一个合法输入,若使用int或者long int类型,则该值无法被正确计算(输出为-1),所以计算时应采用double计算。
源码
#include<stdio.h>
double _16to10( char _16[] );
double Square( int BaseNumber, int Index );
char _16s[100],_8s[100];
int main()
{
int T,t;
int _10 = 0;
scanf("%s",_16s);
printf("%.0lf\n",_16to10( _16s ));
return 0;
}
double _16to10( char _16[] )
{
double Value;
int Length,i;
char* p;
//calculate the string's length
for( p = _16; *p != '\0'; p++ )
;
Length = p - _16;
for( i = Length-1; i >= 0; i-- )
{
switch( _16[i] )
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
Value += ( _16[i] - '0' ) * Square( 16, Length - i - 1 );
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
Value += ( 10 + ( _16[i] - 'A' ) ) * Square( 16, Length - i - 1 );
break;
}
}
return Value;
}
//平方函数
double Square( int BaseNumber, int Index )
{
int i = 0;
double Value = 1;
for( i = 0; i < Index; i++ )
{
Value *= BaseNumber;
}
return Value;
}