正整数进制转换(2,6,8,16进制相互转化)
#include#include #include void D_B(int);void D_O(int);void D_X(int);int B_D(int);void B_O(int);void B_X(int);void O_B(int);int O_D(int);void O_X(int);void X_B(char r[],int k);void X_D(char r[],int k);void X_O(char r[],int k);char mat[6]={'A','B','C','D','E','F'};int main(){ int i,j,k=0; int q; char r[10]; printf("+=============================================================+\n"); printf("| 欢 迎 使 用 进 制 转 换 程 序 |\n"); printf("+=============================================================+\n"); printf(" 注 : 本 版 本 只 做 正 整 数 的 进 制 转 换 ! !"); do { q=0; printf("\n请选择需要被转换的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n4、十六进制\n"); scanf("%d",&i); switch (i) { case 1: printf("\n请选择转换后的进制:\n0、退出\n1、八进制\n2、十进制\n3、十六进制\n"); scanf("%d",&j); switch(j) { case 1: printf("\n请输入您想要转化的数:"); scanf("%d",&k); B_O(k); break; case 2: printf("\n请输入您想要转化的数:"); scanf("%d",&k); printf("\n转换后的数为:%d\n",B_D(k)); break; case 3: printf("\n请输入您想要转化的数:"); scanf("%d",&k); B_X(k); break; case 0: q=1; printf("谢谢使用!!"); } break; case 2: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、十进制\n3、十六进制\n"); scanf("%d",&j); switch(j) { case 1: printf("\n请输入您想要转化的数:"); scanf("%d",&k); O_B(k); break; case 3: printf("\n请输入您想要转化的数:"); scanf("%d",&k); O_D(k); printf("\n转换后的数为:%d\n",O_D(k)); break; case 4: printf("\n请输入您想要转化的数:"); scanf("%d",&k); O_X(k); break; case 0: q=1; printf("谢谢使用!!"); } break; case 3: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十六进制\n"); scanf("%d",&j); switch(j) { case 1: printf("\n请输入您想要转化的数:"); scanf("%d",&k); D_B(k); break; case 2: printf("\n请输入您想要转化的数:"); scanf("%d",&k); D_O(k); break; case 4: printf("\n请输入您想要转化的数:"); scanf("%d",&k); D_X(k); break; case 0: q=1; printf("谢谢使用!!"); } break; case 4: printf("\n请选择转换后的进制:\n0、退出\n1、二进制\n2、八进制\n3、十进制\n"); scanf("%d",&j); switch(j) { case 1: printf("\n请输入您想要转化的数:"); fflush(stdin); gets(r); k=strlen(r); X_B(r,k); break; case 2: printf("\n请输入您想要转化的数:"); fflush(stdin); gets(r); k=strlen(r); X_O(r,k); break; case 3: printf("\n请输入您想要转化的数:"); fflush(stdin); gets(r); k=strlen(r); X_D(r,k); break; case 0: printf("谢谢使用!!"); } break; case 0: q=1; printf("\n谢谢使用!\n"); } }while(q==0);} ///以下为: 二进制转换为十进制,八进制,十六进制.int B_D(int a) //二进制转换为十进制 { int i=1; int result=0; while(a!=0) { result+=(a%10)*i; a=a/10; i*=2; } return result;} void B_O(int a) //二进制转换为八进制{ int j,k,s=0; int p[30]; B_D(a); int result=B_D(a);//先转换为十进制 for(j=0;result!=0;j++) { p[j]=result%8; result=result/8; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%d",p[k]); } printf("\n");}void B_X(int a)//二进制转化为十六进制 { int i=1,j,k,s=0; char p[30]; B_D(a); int result=B_D(a);//先转换为十进制 for(j=0;result!=0;j++) { p[j]=result%16; result=result/16; if (p[j]>=10) { p[j]=mat[p[j]-10]; } else p[j]+=48; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%c",p[k]); } printf("\n");} ///以下为: 八进制转换为二进制,十进制,十六进制.void O_B(int a){ int j,k,s=0; int result=O_D(a);//先转化为十进制 int p[30]; for(j=0;result!=0;j++) { p[j]=result%2; result=result/2; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%d",p[k]); } printf("\n");} int O_D(int a){ int s=0; int result=0; while(a!=0) { result+=(a%10)*i; a=a/10; i*=8; } return result;} void O_X(int a){ int j,k,s=0; char p[30]; int result=O_D(a);//先转化为十进制 for(j=0;result!=0;j++) { p[j]=result%16; result=result/16; if(p[j]<10) p[j]+=48; else p[j]=mat[p[j]-10]; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%c",p[k]); } printf("\n");} ///以下为: 十六进制转换为十进制,二进制,八进制.void X_D(char a[],int k){ int i,j,s=0; int result=0; int b[50]; for(i=0;i ='1') { b[i]=a[i]-48; } else { b[j]=mat[b[j]-10]; } } for(i=1,j=k-1;j>=0;j--,i*=16) { result+=b[j]*i; } printf("\n转换后的数为:%d",result);}void X_B(char a[],int k){ int i,j,s=0; int result=0; int b[50]; int p[30]; for(i=0;i ='1') { b[i]=a[i]-48; } else { b[j]=mat[p[j]-10]; } } for(j=k-1,i=1;j>=0;j--,i*=16) { result+=b[j]*i; } for(j=0;result!=0;j++) { p[j]=result%2; result=result/2; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%d",p[k]); } printf("\n");} void X_O(char a[],int k){ int i,j,s=0; int result=0; int b[30]; int p[30]; for(i=0;i ='1') { b[i]=a[i]-48; } else { b[j]=mat[p[j]-10]; } } for(j=k-1,i=1;j>=0;j--,i*=16) { result+=b[j]*i; } for(j=0;result!=0;j++) { p[j]=result%8; result=result/8; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%d",p[k]); } printf("\n");}///以下为: 十进制转换为二进制,八进制,十六进制.void D_B(int a){ int j=0,k; int p[30]; while(a!=0) { p[j]=a%2; a=a/2; j++; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%d",p[k]); } printf("\n");} void D_O(int a){ int j=0,k; int p[30]; while(a!=0) { p[j]=a%8; a=a/8; j++; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%d",p[k]); } printf("\n");}void D_X(int a){ int j,k; int p[30]; for(j=0;a!=0;j++) { p[j]=a%16; a=a/16; if(p[j]<10) p[j]+=48; else p[j]=mat[p[j]-10]; } printf("\n转换后的数为:"); for(k=j-1;k>=0;k--) { printf("%c",p[k]); } printf("\n");}
十进制转化为其他进制
#includeint main(){ char ku[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int zh[32],i=0,w,j; long int b,y; printf("请输入一个十进制数,我能帮您把它转换成2~16任意进制数:\n"); scanf("%d",&y); b=y; printf("请输入要转换为的进制:"); scanf("%d",&w); printf("\n"); do { zh[i]=y%w; i++; y=y/w; } while(y!=0); printf("把十进制的%ld转换为%d进制:",b,w); for(i--;i>=0;i--) { j=zh[i]; printf("%c",ku[j]); } printf("\n"); return 0;}