数制转换
用数组实现数制转换要求先判断是几进制数,然后实现二进制,八进制,十进制和十六进制之间的转换,还要有判断输入是否正确的程序。我的程序究竟要如何修改?#include<stdio.h>
#include<math.h>
#define N 1000
int i,j,y,n,s;
int m,r,reminder;
int x,l;
//全局变量默认初始化为0,不必再赋0了
D2M(int g,int h) //十进制数转换为其他进制数
{int c[N];
i=0;
reminder=g%h;
g=g/h;
if(reminder>9)
{c[i]=reminder+55;
i++; }
else
{c[i]=reminder;
i++;}
if(g>0)
D2M(g,h);
for(j=i-1;j>=0;j--)
if(c[j]>=65)
printf("%c",c[j]);
else
printf("%d",c[j]);
return 0;
}
M2D(int e) //二进制和八进制数转换为十进制数,并这转换为其他进制数
{int a[N];
printf("请输入%d进制位数:",m);
scanf("%d",&n);
printf("请输入%d进制的每位并使每位用空格隔开:",m);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=n-1;i>=0;i--)
{y+=(int)pow(e,j)*a[i]; //强制类型转换,以免造成数据丢 失
j++;
}
printf("需要转换的进制M:");
scanf("%d",&s);
printf("请输出转换成%d进制的结果:",s);
D2M(y,s);
return 0;
}
H2D(int f) //十六进制数转换为十进制数,并转换为其他进制数
{int b[N];
printf("请输入%d进制位数:",m);
scanf("%d",&n);
printf("请输入%d进制的每位并使每位用空格隔开:",m);
for(i=0;i<n;i++)
scanf("%x",&b[i]);
for(i=n-1;i>=0;i--)
{y+=(int)pow(f,j)*b[i]; //强制类型转换,\以免造成数据 丢失
j++;
}
printf("需要转换的进制M:");
scanf("%d",&s);
printf("请输出转换成%d进制的结果:",s);
D2M(y,s);
return 0;
}
void main()
{printf("请给定一个需转换的数:",m);
scanf("%d",&m);
if(m==2||m==8) M2D(m); //二进制和八进制转换成十进制
else if(m==16) H2D(m); //十六进制转换成十进制
else if(m==10) //十进制转换成其它进制
{printf("请输入一个%d进制数:",m);
scanf("%d",&x);
printf("请输入需要转换成的进制M(2or8or16):");
scanf("%d",&r);
printf("请输出转换成%d进制的结果:",r);
D2M(x,r);
}
printf("\n");
}
/*printf("请给定待转换的进制数M():");
char string [81];
int m,i=0;
char c,k;
gets(string);
for(i=0;(c=string[i])!='\0';i++);
k=string[i-1];
l=i-1;
//printf("%d,\n",l);
if(k=='B')
{m=2;}
if(k=='O')
{m=8;}
if(k=='D')
{m=10;}
if(k=='H')
{m=16;}
//printf("%d,",m);
if(m==2||m==8) M2D(m); //二进制和八进制转换成十进制
else if(m==16) H2D(m); //十六进制转换成十进制
else if(m==10) //十进制转换成其它进制
{printf("请输入一个%d进制数:",m);
scanf("%d",&x);
printf("请输入需要转换成的进制M(2or8or16):");
scanf("%d",&r);
printf("请输出转换成%d进制的结果:",r);
D2M(x,r);
}
printf("\n");
} */