1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <ctype.h> 5 6 int dec2bin(int n) { // 十进制转二进制 7 if (n == 0) { 8 return 0; 9 } else { 10 return (n % 2 + 10 * dec2bin(n / 2)); 11 } 12 } 13 14 int bin2dec(char* s) { // 二进制转十进制 15 int len = strlen(s); 16 int ans = 0; 17 for (int i = 0; i < len; i++) { 18 if (!isdigit(s[i]) || s[i] < '0' || s[i] > '1') { // 判断是否为二进制数 19 printf("输入不合法,请输入二进制数\n"); 20 return -1; 21 } 22 ans = ans * 2 + s[i] - '0'; 23 } 24 return ans; 25 } 26 27 int dec2oct(int n) { // 十进制转八进制 28 if (n == 0) { 29 return 0; 30 } else { 31 return (n % 8 + 10 * dec2oct(n / 8)); 32 } 33 } 34 35 int oct2dec(char* s) { // 八进制转十进制 36 int len = strlen(s); 37 int ans = 0; 38 for (int i = 0; i < len; i++) { 39 if (!isdigit(s[i]) || s[i] < '0' || s[i] > '7') { // 判断是否为八进制数 40 printf("输入不合法,请输入八进制数\n"); 41 return -1; 42 } 43 ans = ans * 8 + s[i] - '0'; 44 } 45 return ans; 46 } 47 48 char* dec2hex(int n) { // 十进制转十六进制 49 char* hex = (char*)malloc(100); 50 int temp, i = 1, j; 51 while (n != 0) { 52 temp = n % 16; 53 if (temp < 10) { 54 temp = temp + 48; 55 } else { 56 temp = temp + 55; 57 } 58 hex[i++] = temp; 59 n = n / 16; 60 } 61 hex[0] = '0'; 62 hex[i] = '\0'; 63 for (j = 1; j <= i / 2; j++) { // 倒序输出十六进制数 64 temp = hex[j]; 65 hex[j] = hex[i - j]; 66 hex[i - j] = temp; 67 } 68 return hex; 69 } 70 71 int hex2dec(char* s) { // 十六进制转十进制 72 int len = strlen(s); 73 int ans = 0; 74 for (int i = 0; i < len; i++) { 75 if (!isalnum(s[i])) { // 判断是否为十六进制数 76 printf("输入不合法,请输入十六进制数\n"); 77 return -1; 78 } 79 if (isdigit(s[i])) { 80 ans = ans * 16 + s[i] - '0'; 81 } else { 82 ans = ans * 16 + s[i] - 'A' + 10; 83 } 84 } 85 return ans; 86 } 87 88 int bin2oct(char* s) { // 二进制转八进制 89 int n = bin2dec(s); 90 if (n == -1) { 91 return -1; 92 } else { 93 return dec2oct(n); 94 } 95 } 96 97 char* oct2bin(char* s) { // 八进制转二进制 98 int n = oct2dec(s); 99 if (n == -1) { 100 return "输入不合法,请输入八进制数\n"; 101 } else { 102 return dec2bin(n); 103 } 104 } 105 106 char* hex2bin(char* s) { // 十六进制转二进制 107 int n = hex2dec(s); 108 if (n == -1) { 109 return "输入不合法,请输入十六进制数\n"; 110 } else { 111 return dec2bin(n); 112 } 113 } 114 115 int main() { 116 while (1) { 117 printf("请输入需要进行的操作:\n"); 118 printf("1、十进制转换为二进制\n"); 119 printf("2、二进制转换为十进制\n"); 120 printf("3、十进制转换为八进制\n"); 121 printf("4、八进制转换为十进制\n"); 122 printf("5、十进制转换为十六进制\n"); 123 printf("6、十六进制转换为十进制\n"); 124 printf("7、二进制转换为八进制\n"); 125 printf("8、八进制转换为二进制\n"); 126 printf("9、十六进制转换为二进制\n"); 127 printf("10、退出\n"); 128 129 int opt; 130 scanf("%d", &opt); 131 char num[100]; 132 switch (opt) { 133 case 1: // 十进制转二进制 134 printf("请输入十进制数:\n"); 135 int n1; 136 scanf("%d", &n1); 137 printf("%d的二进制表示为:%d\n", n1, dec2bin(n1)); 138 break; 139 case 2: // 二进制转十进制 140 printf("请输入二进制数(只能包含0和1):\n"); 141 scanf("%s", num); 142 printf("%s的十进制表示为:%d\n", num, bin2dec(num)); 143 break; 144 case 3: // 十进制转八进制 145 printf("请输入十进制数:\n"); 146 int n3; 147 scanf("%d", &n3); 148 printf("%d的八进制表示为:%d\n", n3, dec2oct(n3)); 149 break; 150 case 4: // 八进制转十进制 151 printf("请输入八进制数(只能包含0~7):\n"); 152 scanf("%s", num); 153 printf("%s的十进制表示为:%d\n", num, oct2dec(num)); 154 break; 155 case 5: // 十进制转十六进制 156 printf("请输入十进制数:\n"); 157 int n5; 158 scanf("%d", &n5); 159 printf("%d的十六进制表示为:%s\n", n5, dec2hex(n5)); 160 break; 161 case 6: // 十六进制转十进制 162 printf("请输入十六进制数:\n"); 163 scanf("%s", num); 164 printf("%s的十进制表示为:%d\n", num, hex2dec(num)); 165 break; 166 case 7: // 二进制转八进制 167 printf("请输入二进制数(只能包含0和1):\n"); 168 scanf("%s", num); 169 printf("%s的八进制表示为:%d\n", num, bin2oct(num)); 170 break; 171 case 8: // 八进制转二进制 172 printf("请输入八进制数(只能包含0~7):\n"); 173 scanf("%s", num); 174 printf("%s的二进制表示为:%s\n", num, oct2bin(num)); 175 break; 176 case 9: // 十六进制转二进制 177 printf("请输入十六进制数:\n"); 178 scanf("%s", num); 179 printf("%s的二进制表示为:%s\n", num, hex2bin(num)); 180 break; 181 case 10: // 退出 182 return 0; 183 default: 184 printf("输入不合法,请重新输入\n"); 185 } 186 187 while (1) { 188 printf("是否继续进行转换(Y/N)?\n"); 189 char c; 190 scanf(" %c", &c); 191 if (c == 'Y' || c == 'y') { 192 break; 193 } else if (c == 'N' || c == 'n') { 194 return 0; 195 } else { 196 printf("输入不合法,请重新输入\n"); 197 } 198 } 199 } 200 return 0; 201 }
该程序首先输出菜单供用户选择需要进行的转换类型,并提示用户输入相应的数字。接着,根据用户输入的数字,程序进入相应的功能函数中。对于输入的数值,在进行相应转换之前,都会进行有效性验证,判断其是否为合法的二进制数、八进制数或十六进制数。最后,程序会询问用户是否继续转换,如果用户输入的是Y,则返回到选择菜单部分;否则,退出整个程序。
标签:十六进制,return,temp,int,C语言,ans,八进制,十进制 From: https://www.cnblogs.com/cloud-sword/p/17477483.html