非负十进制整数n转换为b进制(b=2~16)

一、算法构造

1、递归算法
由题意可知,定义一个有两个参数的递归函数Conversion(n,b)。其中,n表示进行转换的数字,b表示进制。函数的返回值为void。容易得到下面的递归公式:
Conversion(n,b) = { Conversion(0,b) n=0
| Conversion(n/b,b) n>0
2、非递归算法
具体算法实现如图所示。
在这里插入图片描述

二、调试、测试及运行

1、调试
(1)进入Conversion()函数,调用递归结束开始返回的各数据的值。
在这里插入图片描述
(2)Conversion()函数调用结束各数据的值以及输出结果。
在这里插入图片描述
2、运行
在这里插入图片描述在这里插入图片描述

三、具体代码实现

/**
 * 使用Visual Studio 2013进行编写程序
 */
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>

void Conversion(int num, int bin)
{
	if (num == 0)
	{
		return;
	}
	else
	{
		Conversion(num / bin, bin);
		printf("%d", num%bin);
	}
}

int Conversion_un(int num, int bin)
{
	int p = 1, y = 0;
	int remainder = 0;
	while (1)
	{
		remainder = num % bin;
		num /= bin;
		y += remainder*p;
		p *= 10;
		if (num < bin)
		{
			y += num*p;
			break;
		}
	}
	return y;
}

int main()
{	
	int n = 0;
	int b = 0;
	int ch = 0;
	int k = 0;
	printf("Input the number:");
	scanf("%d", &n);
	while (1)
	{
		if (n < 0)
		{
			printf("Input error,try again!\n");
			scanf("%d", &n);
		}
		else
		{
			break;
		}
	}
	printf("Input the binary(2~16):");
	scanf("%d", &b);
	while (1)
	{
		if (b<2 || b>16)
		{
			printf("Input error,try again!\n");
			scanf("%d", &b);
		}
		else
		{
			break;
		}
	}
	printf("Input your choose(1.recursion,2.non-recursive):");
	scanf("%d", &ch);
	while (1)
	{
		if (ch != 1 && ch != 2)
		{
			printf("Input error,try again!\n");
			scanf("%d", &ch);
		}
		else if (ch == 1)
		{
			printf("After Conversion:");
			Conversion(n, b);
			printf("\n");
			break;
		}
		else
		{
			k = Conversion_un(n, b);
			printf("%d\n", k);
			break;
		}
	}
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用顺序栈来实现将一个非负十进制整数n转换为对应的b进制数的操作。具体步骤如下: 1. 初始化一个空的顺序栈,用来存储转换后的b进制数。 2. 对于输入的十进制整数n,不断进行除以b的操作,将余数依次压入顺序栈中,直到商为为止。 3. 从顺序栈中依次弹出所有元素,得到的就是n对应的b进制数。 需要注意的是,对于b大于10的情况,需要将余数转换为对应的字母或符号。例如,当b为16时,余数为10、11、12、13、14、15分别对应A、B、C、D、E、F。 以上就是利用顺序栈将一个非负十进制整数n转换为对应的b进制数的方法。 ### 回答2: 要将一个非负十进制整数n转换为对应的b进制数,可以通过利用顺序栈来实现。具体的步骤如下: 1、创建一个顺序栈,用来存储转换后的b进制数。 2、一直进行整除运算n/b,将余数入栈,直到商为0为止。 3、将栈中的元素依次出栈,得到转换后的b进制数。 例如,将十进制数89转换成二进制数,步骤如下: 1、创建一个顺序栈。 2、89整除2得商44余1,1入栈;44整除2得商22余0,0入栈;22整除2得商11余0,0入栈;11整除2得商5余1,1入栈;5整除2得商2余1,1入栈;2整除2得商1余0,0入栈;1整除2得商0余1,1入栈。此时栈中的元素依次为1、0、0、1、1、0、1。 3、依次弹出栈中的元素,得到转换后的二进制数1011001。 ### 回答3: 顺序栈是一种后进先出的数据结构,适用于需要进行入栈和出栈操作的场景。对于需要将一个非负十进制整数n转换为对应的b进制数,我们可以使用顺序栈来进行计算和存储。下面就是如何使用顺序栈来将一个十进制转换为任意进制数的步骤: 1.初始化一个空的顺序栈,这个栈用来存储转换后的结果。 2.从右向左依次取出需要转换十进制数n的每一位,把它们依次入栈。 3.对于每一位入栈的数字,我们需要将其转换为对应的b进制数。具体的转换方法是:用该数字除以b,得到商和余数。将余数入栈,更新该数字为商。重复以上步骤,直到该数字为0。 4.当所有数字都被放入顺序栈中时,将顺序栈中所有元素依次出栈,即可得到对应的b进制数。 下面是一段Python代码,用来实现将任意十进制数n转换为b进制数: ``` def decimal_to_b(n, b): stack = [] # 初始化一个空栈 while n > 0: stack.append(n % b) # 将余数入栈 n //= b # 更新n为商 result = '' while len(stack) > 0: result += str(stack.pop()) # 将栈中元素依次出栈 return result ``` 这个函数接受两个参数:一个是需要转换十进制数n,另一个是目标进制b。它返回一个字符串,表示将n转换为b进制后的结果。我们可以在调用这个函数时,传入任意的n和b,从而得到对应的进制转换结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值