#include <stdio.h>
#include <stdlib.h>
//十进制转换二进制、八进制、十六进制
void transsum8(int n)
{//实现十进制转换八进制int i=0;int a[50];while(n!=0){a[i]=n%8;n=n/8;i++;}i=i-1;for(i; i>=0; i--){printf("%d%c",a[i],32);}printf("\n");
}
void transsum2(int n)
{//实现十进制转换二进制int i=0;int a[50];while(n!=0){a[i]=n%2;n=n/2;i++;}i=i-1;for(i; i>=0; i--){printf("%d%c",a[i],32);}printf("\n");
}
void transsum16(int n)
{//实现十进制转换十六进制int i=0;int a[50];while(n!=0){a[i]=n%16;n=n/16;i++;}i=i-1;for(i; i>=0; i--){switch(a[i]){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:printf("%d%c",a[i],32);break;case 10:printf("%c%c",'A',32);break;case 11:printf("%c%c",'B',32);break;case 12:printf("%c%c",'C',32);break;case 13:printf("%c%c",'D',32);break;case 14:printf("%c%c",'E',32);break;case 15:printf("%c%c",'F',32);break;default:break;}}printf("\n");
}
int main()
{int n;printf("Enter a num(10):\n");scanf("%d",&n);printf("The result(10->2)is:",n);transsum2(n);printf("The result(10->8)is:",n);transsum8(n);printf("The result(10->16)is:",n);transsum16(n);return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//二进制转八、十、十六进制
void transsum8(int A[],int n)
{//实现二进制转换八进制int i,j=0,num=0;//j记录3位数int array[n],k;//k记录会合几个数memset(array,0,n);//初始化k=n;for(i=n; i>=0; i--){num+=A[i]*pow(2,j);j++;if(j==3){array[k]=num;//三位数一位 存到array数组中,倒叙输出即可k--;//printf("%d%c",num,32);j=0;num=0;}}k=k+1;for(; k<=n; k++){printf("%d%c",array[k],32);}printf("\n");
}
void transsum10(int A[],int n)
{//实现二进制转换十进制int i,j=0,num=0;for(i=n; i>=0; i--){num+=A[i]*pow(2,j);j++;}printf("%d%c",num,32);printf("\n");
}
void transsum16(int A[],int n)
{//实现二进制转换十六进制int i,j=0,num=0;char array[n],k;//k记录会合几个数memset(array,'\0',sizeof(array));//把数组设置为空k=n;for(i=n; i>=0; i--){num+=A[i]*pow(2,j);j++;if(j==4){switch(num){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:array[k]=num+'0';//三位数一位 存到array数组中,倒叙输出即可k--;//printf("%d%c",num,32);break;case 10:array[k]='A';k--;break;case 11:array[k]='B';k--;break;case 12:array[k]='C';k--;break;case 13:array[k]='D';k--;break;case 14:array[k]='E';k--;break;case 15:array[k]='F';k--;break;default:break;}j=0;num=0;}}k=k+1;for(; k<=n; k++){printf("%c11%c",array[k],32);}printf("\n");
}
int main()
{int A[1024];int i=0;printf("Enter a num(2):\n");char n;while((n=getchar())&&(n!='\n')){A[i++]=n-'0';//字符类型的二进制数存储到整形数组中}int j=i-1;printf("The result(2->8)is:",n);transsum8(A,j);printf("The result(2->10)is:",n);transsum10(A,j);printf("The result(2->16)is:",n);transsum16(A,j);return 0;
}
其中八进制转二进制、十进制与十六进制转二进制、十进制的方法可以从上面规律总结出来。注意:八进制和十六进制不可直接转换,中间借助二进制!