【c语言趣味编程100例】数值转换
问题:数值转换
给定一个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");
}