递归实现进制的转化

题目

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

要求

  1. 采用递归思想编程解决问题,要求设计出递归模型(递归出口和递归体的函数式)。
  2. 程序设计风格良好,实现功能测试代码,确保程序的健壮性。
  3. 画出递归树或者递归栈的调用过程
  4. 实先非递归算法

分析

1.转化思想

首先是n对b取商,再将商数赋值给n,然后再将所的与余数作为转化后的数的最低位,直到所去商为零为止。

当所取的进制的数大于10时,要将余数的10,11,12,13,14,15分别转化为A,B,,C,D,E,F

2.递归实现

递归出口:if(b/n=0)

递归体:Digui(n/b,n);


import java.util.Scanner;

public class Jinzhi{
	public static void Digui(int n,int b) {                 //递归实现
		String s=new String();
		if(n>0) {
			switch(n%b) {
			case 10:s="A"+s;break;
			case 11:s="B"+s;break;
			case 12:s="C"+s;break;
			case 13:s="D"+s;break;
			case 14:s="E"+s;break;
			case 15:s="F"+s;break;
			default:s=String.valueOf(n%b)+s;
			}
		}
		if(n!=0) {
			Digui(n/b,b);
		}
		System.out.print(s);
	}    
	/*public static void FDigui(int n,int b) {              //非递归实现
		String s=new String();
		while(n>0) {
			switch(n%b) {
			case 10:s="A"+s;break;
			case 11:s="B"+s;break;
			case 12:s="C"+s;break;  
			case 13:s="D"+s;break;
			case 14:s="E"+s;break;
			case 15:s="F"+s;break;
			default:s=String.valueOf(n%b)+s;
			}
			n/=b;
		}
		
		System.out.print(s);
	}
	 */
	

public static void main(String[] args) {
	int n,b;
	String s;
	Scanner sc=new java.util.Scanner(System.in);
	System.out.println("请输入一个非负十进制整数:");
	n=sc.nextInt();
	while(true) {
		if(n<0) {
				System.out.println("输入错入,请重新输入:");
				n=sc.nextInt();
		}
		else
			break;
	}
	System.out.println("请输入需要转化的进制数(2-16):" );
	b=sc.nextInt();	
	while(true) {
		if(b<1||b>16){
			System.out.println("输入错入,请重新输入:" );
			b=sc.nextInt();
		}
		else
			break;
	}
	
	System.out.println("递归实现:");
	Digui(n,b);
	sc.close();
	/*System.out.println("非递归实现:");
	FDigui(n,b);
	sc.close();*/
 }

}


 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值