第一种方法
#include#include #include int TenNum(char a[],int B); //将输入的数字转换成10进制数 void Numchange(int m, int B); //将转换好了的10进制数转换为所需进制数 int Menu();//主菜单 void choice (int ch);//选择 int ch; int TenNum(char a[],int B) { int len, i, num; int sum = 0; len = strlen(a); //求得字符串长度 for (i = 0; i < len; i++) { if (a[i] >= '0' && a[i] <= '9') num = a[i] - '0'; else if (a[i] >= 'A' && a[i] <= 'F') num = a[i] - 'A' + 10; sum = sum * B + num; } return sum; } void Numchange(int m, int B) { int n; if (m) { Numchange(m / B, B); n = m % B; if (n < 10) printf("%d", n); //小于10直接输出 else printf("%c", n + 55); //大于10转换成字符输出 } } int main() { while (1) { ch = Menu(); choice(ch); ch = -1; } return 0; } int Menu() { int ch; printf("**********************┕------------------------┙ *********************n"); printf("....... 1.十进制数转换成其他进制 ..... n"); printf("....... 2.其他进制数转换成十进制 ..... n"); printf("....... 3.二进制数转换成八进制 ..... n"); printf("....... 4.八进制数转换成二进制 ..... n"); printf("....... 5.二进制数转换成十六进制 ..... n"); printf("....... 6.十六进制数转换成二进制 ..... n"); printf("....... 7.八进制数转换成十六进制 ..... n"); printf("....... 8.十六进制数转换成八进制 ..... n"); printf("....... 9.退出系统 ..... n"); printf("**********************┕------------------------┙ *********************n"); printf("请选择:n"); scanf("%d", &ch); return ch; } void choice(int ch) { char a[20]; //存储原数 int B; //存储原数制 int b; //存储目标数制 int m; //存储目标数 int item = 1; //是否退出程序或继续 while (item) {switch (ch) { case 1: printf("转换前的十进制数是:n"); getchar(); gets(a); B = 10; m = TenNum(a, B);//将输入的数字转换成十进制数 printf("转换后的其他进制是:n"); scanf("%d",&b); printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 2: printf("转换前的其他进制数是:n"); getchar(); gets(a); m = TenNum(a, B);//将输入的数字转换成十进制数 b=10; printf("其他进制数%s转换为%d进制数的结果为:n",a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 3: printf("转换前的二进制数是:n"); getchar(); gets(a); B=2; m = TenNum(a, B);//将输入的数字转换成十进制数 b=8; printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 4: printf("转换前的八进制数是:n"); getchar(); gets(a); B=8; m = TenNum(a, B);//将输入的数字转换成十进制数 b=2; printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 5: printf("转换前的八进制数是:n"); getchar(); gets(a); B=2; m = TenNum(a, B);//将输入的数字转换成十进制数 b=16; printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 6: printf("转换前的十六进制数是:n"); getchar(); gets(a); B=16; m = TenNum(a, B);//将输入的数字转换成十进制数 b=2; printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 7: printf("转换前的八进制数是:n"); getchar(); gets(a); B=8; m = TenNum(a, B);//将输入的数字转换成十进制数 b=16; printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 8: printf("转换前的十六进制数是:n"); getchar(); gets(a); B=16; m = TenNum(a, B);//将输入的数字转换成十进制数 b=8; printf("%d进制数%s转换为%d进制数的结果为:n",B,a,b); Numchange(m, b); printf("n继续请输入1,否则输入0:n"); scanf("%d", &item); break; case 9: printf("项目结束!n"); item=0; exit(0); break; default: printf("输入错误!n"); } } }
第二种方法
#include#include #define MAXCHAR 101 int Menu(); void choose (int ch); int char_to_num(char ch); char num_to_char(int num); long source_to_decimal(char temp[], int source); int decimal_to_object(char temp[], long decimal_num, int object); void output(char temp[], int length); int ch = -1; int main() { while (1) { ch = Menu(); choose(ch); ch = -1; } return 0; } int Menu() { int ch; printf("**********************┍ -----------------------┑ *********************n"); printf("********************** 欢迎使用进制转换系统系统 *********************n"); printf("**********************┕------------------------┙ *********************n"); printf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx菜单xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxn"); printf("======================================================================n"); printf("....... 1.十进制数转换成其他进制度 ..... n"); printf("....... 2.其他进制数转换成十进制 ..... n"); printf("....... 3.二进制数转换成八进制 ..... n"); printf("....... 4.八进制数转换成二进制 ..... n"); printf("....... 5.二进制数转换成十六进制 ..... n"); printf("....... 6.十六进制数转换成二进制 ..... n"); printf("....... 7.八进制数转换成十六进制 ..... n"); printf("....... 8.十六进制数转换成八进制 ..... n"); printf("....... 9.退出系统 ..... n"); printf("请输入你的选择:n"); scanf("%d", &ch); return ch; } void choose(int ch) { int source; int object; int length; long decimal_num; char temp[MAXCHAR]; int flag = 1; while (flag) {switch (ch) { case 1: printf("转换前的十进制数是:"); scanf("%s", &temp); source = 10; printf("转换后的进制是:"); scanf("%d", &object); printf("转换后的数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 2: printf("转换前的其他进制数是:"); scanf("%s", &temp); printf("转换前的进制是:"); scanf("%d", &source); printf("转换后的进制是:"); scanf("%d", &object); printf("转换后的数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 3: printf("转换前的二进制数是:"); scanf("%s", &temp); source = 2; object = 8; printf("转换后的八进制数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 4: printf("转换前的八进制数是:"); scanf("%s", &temp); source = 8; object = 2; printf("转换后的二进制数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 5: printf("转换前的二进制数是:"); scanf("%s", &temp); source = 2; object = 16; printf("转换后的十六进制数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 6: printf("转换前的十六进制数是:"); scanf("%s", &temp); source = 16; object = 2; printf("转换后的二进制数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 7: printf("转换前的八进制数是:"); scanf("%s", &temp); source = 8; object = 16; printf("转换后的十六进制数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 8: printf("转换前的十六进制数是:"); scanf("%s", &temp); source = 16; object = 8; printf("转换后的八进制数是:"); decimal_num = source_to_decimal(temp, source); length = decimal_to_object(temp, decimal_num, object); output(temp, length); printf("继续请输入1,否则输入0:n"); scanf("%d", &flag); break; case 9: printf("项目结束!"); flag=0; exit(0); break; default: printf("输入错误!n"); } } } int char_to_num(char ch) { if(ch>='0' && ch<='9') return ch-'0'; else return ch-'A'+10; } char num_to_char(int num) { if(num>=0 && num<=9) return (char)('0'+num-0); else return (char)('A'+num-10); } long source_to_decimal(char temp[], int source) { long decimal_num = 0; int length; int i; for( i=0; temp[i]!=' '; i++ ); length=i; for( i=0; i<=length-1; i++ ) decimal_num = (decimal_num*source) + char_to_num(temp[i]); return decimal_num; } int decimal_to_object(char temp[], long decimal_num, int object) { int i=0; while(decimal_num) { temp[i] = num_to_char(decimal_num % object); decimal_num = decimal_num / object; i++; } temp[i]=' '; return i; } void output(char temp[], int length) { int i; for( i=length-1; i>=0; i--) printf("%c", temp[i]); printf("n"); }
对我的博客或其他方面有任何见解或问题的话都可以私信我
或者联系本人QQ:3128909688
微信:DreamHerome
欢迎致电



