将非负十进制整数n转换成b进制(其中b= 2~16)

题目:将非负十进制整数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);   //调用转化函数函数
}

结果检验:
在这里插入图片描述
在这里插入图片描述

发布了12 篇原创文章 · 获赞 13 · 访问量 5340

猜你喜欢

转载自blog.csdn.net/qq_41522951/article/details/91321673
今日推荐