注册 登录
编程论坛 VC++/MFC

数制转换

bianchengshe 发布于 2015-01-16 16:46, 648 次点击
用数组实现数制转换要求先判断是几进制数,然后实现二进制,八进制,十进制和十六进制之间的转换,还要有判断输入是否正确的程序。我的程序究竟要如何修改?
#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");
} */
5 回复
#2
天使梦魔2015-01-18 10:49
你这一坨程序我实在没办法看。
如果不计较太多只是显示可以用C++的流,比如
cout<<hex<<255;//程序输出十六进制的ff
#3
bianchengshe2015-01-19 10:14
回复 楼主 bianchengshe
你好,你能帮我弄一个和要求相符合的程序吗?我实在是不知道该怎样去弄了,谢谢!!!
#4
bianchengshe2015-01-19 10:28
回复 2楼 天使梦魔
你好,你能帮我弄一个和要求相符合的程序吗?我实在是不知道该怎样去弄了,谢谢!!!
#5
wp2319572015-01-19 11:24
这个东东知道原理还是自己实现吧

我目测你 原理尚不明确    其实除了10进制外,其他的进制 都只能以字符串形式模拟
#6
bianchengshe2015-01-19 15:07
回复 5楼 wp231957
你好,你能帮我弄一个和要求相符合的程序吗?我实在是不知道该怎样去弄了,谢谢!!
1