#include <stdio.h>
#define N 8
void tran(int num,int k)
{
int arr[N],i;
for (i=0;i <N;i++)
{
arr[i]=num%k;
num=num/k;
if (num==0)
break;
}
printf("转换为%d进制数为: ",k);
for (;i>=0;i--)
switch (arr[i])
{
case 10: printf("A");break;
case 11: printf("B");break;
case 12: printf("C");break;
case 13: printf("D");break;
case 14: printf("E");break;
case 15: printf("F");break;
default: printf("%d",arr[i]);
}
printf("/n/n/n");
}
void main()
{
int num,choo;
loop: printf("请选择功能:0.退出 1.十进制转二进制 2.十进制转八进制 3.十进制转十六进制/n");
scanf("%d",&choo);
switch (choo)
{
case 1:
printf("请输入要转换的十进制数:");
scanf("%d",&num);
tran (num,2);
goto loop;
case 2:
printf("请输入要转换的十进制数:");
scanf("%d",&num);
tran (num,8);
goto loop;
case 3:
printf("请输入要转换的十进制数:");
scanf("%d",&num);
tran (num,16);
goto loop;
case 0:break;
default :
printf("输入有误!请重新输入!/n");
goto loop;
}
}
——————————————————————————————————————————————————————
/*
输入一个字符串,如:H1AX-B2.8Y?302,将其中连续的十六进制数字字符串转换成等价的十进制一次存放到一个数组a中。如1A转换成26放在a[1],-B2.8转换成-178.5放在a[2],……统计共有多少个数,并输出这些数。(假设所有转换后的数都在实数范围内)。
刚刚忘了小数点~~*/
#include <stdio.h>
#include <math.h>
#include <string.h>
#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;
}