满意答案
wang2222065
推荐于 2016.12.04
采纳率:54% 等级:13
已帮助:7914人
/*刚刚忘了小数点~~*/
#include
#include
#include
#define MAXSIZE 20 /*串最大长度*/
#define RADIX 16 /*基数*/
int main()
{
char source[MAXSIZE];
float result[MAXSIZE/2] = {0}; /*数组长度不会超过串长度的一半*/
int sign = 1; /*正负号*/
int precision = -1; /*小数位数*/
int i,j;
gets(source);
printf("%s\n",source);
for(i=0, j=0;i<=strlen(source); i++)
{
switch(source[i]) /*可以使用if语句替换但这样效率更高*/
{
case '.':
precision = 0;
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9': /*计算结果*/
if(precision != -1)
precision++;
result[j] = result[j] * RADIX +(source[i]-'0');
break;
case 'A': /*如果愿意可以加上小写字母的判断*/
case 'B':
case 'C':
case 'D':
case 'E':
case 'F': /*计算结果*/
if(precision != -1)
precision++;
result[j] = result[j] * RADIX +(source[i]-'A'+10);
break;
default: /*结果有两种情况零的情况需要额外判断*/
if(precision != -1)
result[j] /= pow(float(RADIX),precision);
if(((fabs(result[j]) <= 0.000001)&&(source[i-1] == '0'))||(fabs(result[j]) > 0.000001))
{
result[j] *= sign;
printf("%f\n",result[j]);
j++;
}
precision = -1;
if(source[i] == '-')
sign=-1;
else
sign=1;
break;
}
}
getchar();
return 0;
}
05分享举报