问题:数值转换
给定一个M进制的数X 实现对X向任意的一个非M进制的数的转换 

#include<stdio.h>
/*
问题:数值转换
给定一个M进制的数X 实现对X向任意的一个非M进制的数的转换

**/
#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_num,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);//将0-9之间的数字转换成字符
	else
		return (char)('A'+num-10);//将大于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");

}