1.10 数制轮换
#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") ; }