C语言实现进制转换

程序说明:

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

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
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  4)                                   //非四的整数倍时,多出几个就从第几个打第一个空格
			if (count == a % 4)                                    //求多余的个数,也就是凑不齐四的个数,如5就多余1
				printf(" ");
		if ((count - a % 4) % 4 == 0 && (count - a % 4) > 0)       //排除count为0的情况,四的整数倍时,每隔四个打一个空格
			printf(" ");
	}
	printf("\n\a");
}

运行情况:

C语言实现进制转换_第1张图片 

 

你可能感兴趣的:(c语言,算法,visual,studio)