任务描述
编写递归函数,实现将一个十进制的整数以r(r=2,8,16)进制的形式输出。
相关知识
设有一个r进制数:
与十进制数的换算关系为:
dn是数码,r的i次方是对应数位上的权。例如:
十进制转换成r进制的方法是:除r取余数,直到商为0,余数逆序排列。例如,下面是一个将十进制整数57转换成二进制数的过程:
已知:
二进制的数码只包含0,1,共2个符号;
八进制的数码有0,1,2,...,7,共8个符号;
十六进制的数码有0,1,2,...,9,A,B,C,D,E,F,共16个符号,分别表示十进制的0,1,2,...,9,10,11,12,13,13,15。
编程要求
根据提示,在右侧编辑器补全递归函数TransformToR(int n,int r),用于实现一个十进制的整数以r(r=2,8,16)进制的形式输出,在main函数中输入正整数n以及要转换的目标进制,然后调用所写的函数进行进制转换并输出结果。
测试说明
测试样例1:
测试样例2:
测似样例3:
其中:
黑色字体为输出内容;
红色字体为输入内容;
所有标点符号均为英文标点。
#include <stdio.h>
#include <stdlib.h>
void TransformToR(int n,int r);
void PrintNumber(int n);
int main()
{
int n,r;
printf("Input n,r(r=2,8,16):\n");
scanf("%d,%d",&n,&r);
TransformToR(n,r);
printf("\n");
return 0;
}
//将 整数 n 转换成其对应的 r 进制的表示并输出,r 不超过16
void TransformToR(int n,int r)
{
if(n / r == 0)
{
PrintNumber(n % r);
return;
}
else
{
TransformToR(n / r, r);
PrintNumber(n % r);
}
}
//打印数字 n
void PrintNumber(int n)
{
if(n < 10)
printf("%d",n);
else
{
switch(n)
{
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
default:
printf("G");
break;
}
}
}