题目:将非负十进制整数n转换成b进制(其中b= 2~16)要求:采用递归思想编程解决问题,并实现非递归方法。
题目分析:
(1)当转化的为16进制时,会出现字母。
(2)采用递归和迭代解决该问题。
(3)设置递归模型。
函数设计:
int trans(int n,int b,int i){
int temp=0;
if(n==0){
for(int j=i-1;j>=0;j--)
cout<<arr[j];
return 1; //递归出口
}
temp=n%b;
if(temp>=10){
arr[i]=temp-10+'A';
}else{
arr[i]=temp+'0';
}
n=n/b;
trans(n,b,i+1); //递归调用
}
用递归实现代码:
/*用递归解决将非负十进制整数n转换成b进制
*/
#include<iostream>
using namespace std;
char arr[100];
int trans(int n,int b,int i){
int temp=0;
if(n==0){ //递归出口
for(int j=i-1;j>=0;j--)
cout<<arr[j];
return 1;
}
temp=n%b;
if(temp>=10){
arr[i]=temp-10+'A'; //如果对b求余,大于10,则储存A,B,C,,,,,
}else{
arr[i]=temp+'0'; //如果对b求余,小余10,则储存10以内的数字
}
n=n/b;
trans(n,b,i+1);
}
int main(){
int n,b,i=0;
cout<<"输入十进制非负整数:"<<endl;
cin>>n;
cout<<"输入要转为b进制:"<<endl;
cin>>b;
trans(n,b,i); //调用递归函数
}
迭代法实现代码:
#include<iostream>
using namespace std;
char arr[100];
int trans(int n,int b,int i){
int temp=0;
if(n==0){
for(int j=i-1;j>=0;j--)
cout<<arr[j];
return 1;
}
temp=n%b;
if(temp>=10){ //如果对b求余,大于10,则储存A,B,C,,,,,
arr[i]=temp-10+'A';
}else{
arr[i]=temp+'0'; //如果对b求余,小余10,则储存10以内的数字
}
n=n/b;
trans(n,b,i+1);
}
int main(){
int n,b,i=0;
cout<<"输入十进制非负整数:"<<endl;
cin>>n;
cout<<"输入要转为b进制:"<<endl;
cin>>b;
trans(n,b,i); //调用转化函数函数
}
结果检验: