admin管理员组

文章数量:1794759

C语言实现进制转换

C语言实现进制转换

程序说明:

1、支持16进制以内的任意两进制之间的转换2、输入需合法,非法时无提示,此时计算出的值无意义3、输入合法情况下可使用空格,更直观的检查输入是否正确也便于快速输入4、输出时自动分隔,便于查看和使用5、稍加修改就能得到拓展

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<math.h> #include<string.h> int len1=0; //记录结果长度 int to_int_arr(char* charnumber, int* arr); //字符串转整型串 int to_ten(int scale_in, int* arr, int len); //整型串转整型 void get_result(int scale_out, int ten, int* arr1); //整型转结果 void show_result(int arr1[40]); //输出结果 int main(void) { int scale_in = 0; //输入进制 int scale_out = 0; //输出进制 int arr[40]={0}; //存整型串 int arr1[40]={0}; //存结果 char charnumber[40]={0}; //存字符输入 char flag=0; //主体框架控制 do { printf("注意:现仅支持16进制以内的转换,如需更大范围转换,请自行拓展。\\n各数值现允许有空格符插入,注意输入的合法性!!!\\n请您分别输入输入进制和输出进制:"); scanf("%d %d", &scale_in,&scale_out); printf("请您输入数值:"); getchar(); //把上个输入遗留的换行符清理,不然fgets还没输入就过了。 fgets(charnumber, 40, stdin); //使用标准输入流,不超过范围换行符也读取,这不影响程序,反而缓冲区能清理干净,避免后面使用getchar(). printf("%d进制数%s的%d进制形式为:",scale_in,charnumber,scale_out); get_result(scale_out, to_ten(scale_in, arr, to_int_arr(charnumber, arr)), arr1); show_result(arr1); printf("Press q to qiut,else continue:"); scanf("%c", &flag); } while (flag != 'q'); return 0; } int to_int_arr(char* charnumber, int* arr) { int j = 0; for (int i = 0;i < (int)strlen(charnumber);i++) { if(charnumber[i]>='0'&&charnumber[i]<='9') //当为数字字符 arr[j++] = charnumber[i] - '0'; //不是字符数字就不行 if (charnumber[i] >= 'A' && charnumber[i] <= 'F') //当为大写字母字符时 arr[j++] = charnumber[i] - 55; } return j; //j 元素个数 } int to_ten(int scale_in, int* arr, int len) { int a = 0; int x = len-1; for (int i = 0;i <len;i++) a += arr[i] * (int)pow((double)scale_in, (double)x--); return a; } void get_result(int scale_out, int ten, int* arr1) { while (ten != 0) { arr1[len1++] = ten % scale_out; ten /= scale_out; } } void show_result(int arr1[40]) { int count = 0; int a = len1; while (len1) { int b = 10; if (arr1[len1 - 1] < 10) { printf("%d", arr1[-1+len1--]); count++; } else for (int i = 0;i < 6;i++) //逐个对比找出对应字符,一旦找出直接退出循环,退出循环由i=6实现 { if (arr1[len1 - 1] == b) { printf("%c", b + 55); count++; len1--; i = 6; } b++; } if (a % 4 != 0 && a > 4) //非四的整数倍时,多出几个就从第几个打第一个空格 if (count == a % 4) //求多余的个数,也就是凑不齐四的个数,如5就多余1 printf(" "); if ((count - a % 4) % 4 == 0 && (count - a % 4) > 0) //排除count为0的情况,四的整数倍时,每隔四个打一个空格 printf(" "); } printf("\\n\\a"); }

运行情况:

 

 

本文标签: 语言