题目1:将非负十进制整数n转换成b进制。(其中b=2~16)
递归模型:(1)递归出口:n=0;
(2)递归体:if(d>=10)//如果是10进制以上
{
if(n%d>=10)
{
printf("%c",(char)((n%d-10)+'A'));
}
else//如果余数小于10,则直接输出
printf("%d",n%d);
}
//如果进制小于10,不会有字母的问题
else
printf("%d",n%d);
二.测试结果
三.程序实现
递归:
#include<stdio.h>
void shift(int n,int d)//10进制转换成任意进制
{
if(n==0)
return ;
else
{
shift(n/d,d);
if(d>=10)//如果是10进制以上
{
if(n%d>=10)
{
printf("%c",(char)((n%d-10)+'A'));
}
else//如果余数小于10,则直接输出
printf("%d",n%d);
}
//如果进制小于10,不会有字母的问题
else
printf("%d",n%d);
}
}
int main()
{
int n,d;
char again='y';
while(again=='y'||again=='Y')
{
printf("请输入十进制数:");
scanf("%d",&n);
printf("请输入要转换成几进制:");
scanf("%d",&d);
if(n==0)
{
printf("转换完成:0");
continue;
}
printf("转换完成:");
shift(n,d);
printf("\n");
printf("继续(y/n):");
scanf("%s",&again);
}
return 0;
}
非递归:
#include<stdio.h>
void main(){
void change(int num,int parseNum);
char ch;
do{
//声明变量,用于操作待转换的数和转换的进制数
int num,parseNum;
printf("请输入一个十进制数:\n");
scanf("%d",&num);
printf("请输入要转换的进制数:\n");
scanf("%d",&parseNum);
change(num,parseNum);
printf("继续(Y/N)\n");
scanf("%s",&ch);
}while(ch=='Y'||ch=='y');
}
//定义函数,用来进行进制转换
void change(int num,int parseNum){
int i,j=0;
//定义一个数组
int nums[(sizeof(num)*8)];
//判断num是否大于0,当a与转换的进制数相除小于0后,程序结束
while(num>0){
//进行进制间转换
nums[i]=num%parseNum;
num=num/parseNum;
i++;
}
for(j=i-1;j>=0;j--){
if(nums[j]>9){
switch(nums[j]){
case 10:
printf("A");
continue;
case 11:
printf("B");
continue;
case 12:
printf("C");
continue;
case 13:
printf("D");
continue;
case 14:
printf("E");
continue;
case 15:
printf("F");
continue;
}
}
printf("%d",nums[j]);
}
printf("\n");
}