进制转换

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MAXCHAR 101		//最大允许字符串长度
//将字符转换成数字
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] != '\0'; 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] = '\0';
	return i;
}
//逆序输出新数
void output(char temp[], int length)
{
	int i;
	for (i = length - 1; i >= 0; i--)	//输出temp数组中的值
		printf("%c", temp[i]);
	printf("\n");
}
int main()
{
	int source;			//存储原数制
	int object;			//存储目标数制
	int length;			//存储转换成目标数制后字符数组的长度
	long decimal_num;	//存储转换成的十进制数
	char temp[MAXCHAR];	//存储待转换的数值和转换后的数值
	int flag = 1;		//存储是否退出程序的标志
	while (flag)		//利用输出的flag值控制循环
	{
		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);
	}
}

posted @ 2023-04-23 17:13  258333  阅读(6)  评论(0编辑  收藏  举报