进制转换
问题分析:
给定一个M进制的数x,实现对x向任意的一个非M进制的数转换
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAXCHAR 101
//字符转换为数字
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, int object);
//转换后新数输出
void output(char temp[], int length);
void main()
{
int source;
int object;
int length;
long decimal_num;
char temp[MAXCHAR];
int flag = 1;
while (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);
}
}
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--)
printf("%c", temp[i]);
printf("\n");
}


浙公网安备 33010602011771号