十进制N转B进制

一、题目分析
将非负十进制整数n转换成b进制。(其中b=2~16)
基本要求:
1.完成题目,采用递归思想编程解决问题,要求设计出递归模型(递归出口和递归体的函数式)。
2.程序设计风格良好,实现功能测试代码,确保程序的健壮性。
3.画出递归树或者递归栈的调用过程。
4.实现非递归方法。
二、算法构造
1、递归算法
由题意可知,定义一个有两个参数的递归函数change(before,after)。其中,before表示需要进行转换的数字,after表示即将转换的进制。得到下面的递归公式:
change(before,after) = { change(0,after) before=0
change(before/after,after) before>0
利用求余数的方法来对应a[]数组的大小来求得相应的进制数,
2、非递归算法
在这里插入图片描述
依旧是利用求余数的方式相应转换进制,直到判断before<jz输出结束。
三、算法实现

#include<iostream>
#include<string.h>
using namespace std;
char a[]="0123456789abcdef";
//递归
void change(int before,int jz)
{
	if(before=0)
	{
		return ;
	}
	else
	{
		change(before/jz,jz);
		cout<<a[before%jz];
	}
}
/*
//非递归
int Exchange(int before, int jz)
{
	int p=1, y=0;
	int remainder=0;
	while (1)
	{
		remainder=before%jz;
		before/=jz;
		y+=remainder*p;
		p*=10;
		if(before<jz)
		{
			y+=before*p;
			break;
		}
	}
	return y;
}
*/
void main()
{
	int before=0;
    cout << "please enter a number in base 10" << endl;
    cin >> before;
	while (1)
	{
		if (before<0)
		{
			printf("error,input again!\n");
			scanf("%d", &before);
		}
		else
		{
			break;
		}
	}
	int i;
	for(i=2;i<=16;i++)
	{
		cout<<"转换为"<<i<<"进制是";
		change(before,i);
		cout<<endl;
	}
/*	for(i=2;i<=16;i++)
	{
	    cout<<"转换为"<<i<<"进制是";
		k=Exchange(before,i);
		cout<<k<<endl;
	}
*/
}

四、运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值