十进制转换八进制,二进制,十六进制:
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 #define MAX 20 6 7 int bin_val[MAX]; //存放十进制转换成二进制的结果 8 9 int get_int() 10 { 11 int in; 12 while(scanf("%d",&in) == -1){ 13 printf("please input a num\n"); 14 while(getchar() != '\n') ; 15 } 16 17 while(getchar() != '\n') ; 18 return in; 19 } 20 21 int menue() 22 { 23 int item; 24 printf("**********************************\n"); 25 printf("1.decimal converted into a binary;\n"); 26 printf("2.decimal converted to a hexadecimal;\n"); 27 printf("3.decimal converted into octal;\n"); 28 printf("4.exit the system;\n"); 29 printf("**********************************\n"); 30 31 printf("please input a number you want to do\n"); 32 33 while(item = get_int(),item < 1 || item > 4){ //逗号表达式 34 printf("please input [1-4]\n"); 35 } 36 return item; 37 } 38 39 int com_conver_binary() //转换成二进制的通用函数,为了十进制转换成十六进制做准备 40 { 41 int value; //需要转换的值 42 43 int mod; //余数 44 int i = 0; //记录二进制的位数 45 printf("please input a num you want to conver :\n"); 46 value = get_int(); 47 48 while((mod = value % 2), (value /= 2) != 0){ //十进制转换二进制 49 bin_val[i++] = mod; 50 } 51 bin_val[i++] = mod; //当value等于零的时候循环已经终止,但是余数还未加到结果中,so...... 52 53 return i; 54 } 55 56 /*****转换八进制和二进制的函数可以通用的,*****/ 57 void conver_octal() //转换成八进制 58 { 59 int value; //需要转换的值 60 61 int mod; //余数 62 int i = 0; //记录八进制的位数 63 printf("please input a num you want to conver :\n"); 64 value = get_int(); 65 66 while((mod = value % 8), (value /= 8) != 0){ //十进制转换八进制 67 bin_val[i++] = mod; 68 } 69 bin_val[i++] = mod; //当value等于零的时候循环已经终止,但是余数还未加到结果中,so...... 70 71 while(i--) 72 printf("%d",bin_val[i]); 73 74 puts("\n"); 75 } 76 77 void conver_binary() //转换成二进制 78 { 79 int i; 80 i = com_conver_binary(); 81 82 while(i--) 83 printf("%d",bin_val[i]); 84 85 puts("\n"); 86 } 87 88 char hex_ch(int value) 89 { 90 char ch; 91 switch(value){ 92 case 0: 93 case 1: 94 case 2: 95 case 3: 96 case 4: 97 case 5: 98 case 6: 99 case 7: 100 case 8: 101 case 9: ch = value + '0'; break; 102 case 10: ch = 'A'; break; 103 case 11: ch = 'B'; break; 104 case 12: ch = 'C'; break; 105 case 13: ch = 'D'; break; 106 case 14: ch = 'E'; break; 107 case 15: ch = 'F'; break; 108 } 109 return ch; 110 } 111 112 void conver_hex() //转换成十六进制 113 { 114 char hex_val[MAX]; //由于十六进制中有字母,所以要用char型 115 int bin_bit; //十进制转换成二进制的位数 116 int hex_bit = 0; //十六进制的结果位数 117 int i; 118 119 int sum = 0; //四位的二进制的十进制和 120 bin_bit = com_conver_binary(); //十进制先转换成二进制 121 122 for(i = 0; i < bin_bit; i++){ //二进制转换成十六进制 123 switch(i % 4){ 124 case 0: sum += (bin_val[i] * 1); break; 125 case 1: sum += (bin_val[i] * 2); break; 126 case 2: sum += (bin_val[i] * 4); break; 127 case 3: sum += (bin_val[i] * 8); break; 128 } 129 if(i % 4 == 3){ 130 hex_val[hex_bit++] = hex_ch(sum); 131 sum = 0; 132 } 133 } 134 if(bin_bit % 4 != 0) 135 hex_val[hex_bit++] = hex_ch(sum); //一定不能忘记,如果二进制的位数不是四的倍数,就需要此部分 136 137 while(hex_bit--) 138 printf("%c",hex_val[hex_bit]); 139 140 puts("\n"); 141 } 142 143 int main() 144 { 145 while(1){ 146 switch(menue()){ 147 case 1:conver_binary(); break; 148 case 2:conver_hex(); break; 149 case 3:conver_octal(); break; 150 case 4:exit(0); break; 151 } 152 } 153 }