1.10 数制轮换

发布时间 2023-04-26 20:44:57作者: 痛苦代码源
#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_num, int object);
/*返回转换成目标数制后字符数组的长度*/
void output (char temp[], int length) ;
/*将字符数组逆序打印*/
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_ obj ect (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) ('O'+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]!='10' ;i++) ;

length=i;

for (i=0;i<=length-1;i++)

/*累加*/

decimal num= (decimal num* source)+char_ to num(temp[i]);return decimal num;

 20:29:58
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) ;

/*求出余数并转换为字符*/

dec imal_ num=decimal num/ object ;

/*用十进制数除以基数*/

i++;

temp[i]='lo' ;return i;

void

output (char temp[] , int length)

int i;

for (i=length-1;i>=0;i--)

/*输出temp数组中的值*/

printf ("8c", temp[i]) ;printf ("In") ;

}