【算法设计-模拟】进制转换

1. 十进制转二进制

#include <stdio.h>
#include <vector>
using namespace std;

int main(){
	unsigned int n;
	
	while (scanf("%d", &n) != EOF){
		vector<int> binary; // 写在里面,每次循环都会被清空
		
		while (n != 0){
			binary.push_back(n % 2);
			n = n / 2;
		}
		
		for (int i = binary.size() - 1; i >= 0; i--){
			printf("%d", binary[i]);
		}
		printf("\n");
	}
	
	return 0;
}

2. 十进制转r进制(2<=r<=36)

#include <stdio.h>
#include <vector>
using namespace std;

int main(){
	int num, r;
	int tmp;
	
	printf("请输入数字num以及r进制:\n");
	
	while (scanf("%d %d", &num, &r) != EOF){
		vector<char> result;
		tmp = 0;
		
		while (num > 0){
			tmp = num % r;
			if (tmp < 10)
				result.push_back(tmp + '0');
			else
				result.push_back(tmp - 10 + 'A');
			num = num / r;
		}
		
		for (int i = result.size() - 1; i >= 0; i--){
			printf("%c", result[i]);
		}
		printf("\n");
	}
	
	return 0;
}

3. 将M进制数X转换为N进制数(2<=M, N<=36)

#include <cstdio>
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main(){
	int M, N;
	string X;
	int tmp, num;
	
	printf("请输入M以及N,和M进制下的数字X:\n");
	
	while (cin >> M >> N >> X){
		vector<char> result;
		num = 0;
		
		// 先将M进制数转换为十进制数
		for (int i = 0; i < X.size(); i++){
			if (i == 0)  // 计算M^i
				tmp = 1;
			else
				tmp = M * tmp;
				
			int index = X.size() - i - 1;
			if ('0' <= X[index] && X[index] <= '9')
				num += (X[index] -'0') * tmp;
			else if ('A' <= X[index] && X[index] <= 'Z')
				num += (X[index] -'A' + 10) * tmp;
			else if ('a' <= X[index] && X[index] <= 'z')
				num += (X[index] -'a' + 10) * tmp;
		}
		
		//printf("%d\n", num);
		
		// 再将十进制数转换为N进制数 
		while (num > 0){
			tmp = num % N;
			if (tmp < 10)
				result.push_back(tmp + '0');
			else
				result.push_back(tmp - 10 + 'A');
			num = num / N;
		}
		
		for (int i = result.size() - 1; i >= 0; i--)
			printf("%c", result[i]);
		printf("\n");
	}
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 对于这个问题,我可以提供以下解答: 在emu8086中,可以使用指令“MOV AX, hex_value”将一个16的值移动到AX寄存器中,然后可以使用指令“CWD”将AX寄存器的内容扩展到DX:AX寄存器中。最后,可以使用指令“IDIV divisor”将DX:AX寄存器中的值除以一个除数(divisor)并得到一个10的商和余数。因此,通过这些指令可以将16的值转换成10。 ### 回答2: emu8086是一款模拟x86汇编语言的软件,可以在其中编写和调试汇编程序。要将16转换为10,可以使用emu8086提供的一些功能和指令。 首先,我们可以使用emu8086中的MOV指令将16值加载到一个寄存器中。比如,可以将16值0x1234加载到AX寄存器中,可以使用如下指令: MOV AX, 1234H 接着,我们可以使用一个辅助寄存器,例如DX,将AX中的16转换为10。在emu8086中,可以使用下面的指令来实现: XOR DX, DX MOV CX, 10 DIV CX 上述指令的作用是将DX和AX组合成一个32位的数字,并使用CX中的值10行除法运算。这样,结果将保存在AX和DX中,其组合就是10的值。 最后,我们可以使用emu8086中的功能来显示或输出10值。可以使用INT 21H中断将10转换为字符串,然后使用另一个INT 21H中断来显示或输出该字符串。 因此,在emu8086中,将16转换为10可以遵循上述步骤,即先加载到寄存器中,然后使用辅助寄存器转换,最后再行显示或输出。 ### 回答3: emu8086是一款8086汇编语言的模拟器,用于学习和编写汇编语言程序。在这个模拟器中,要将16转换为10数,可以使用以下步骤: 首先,我们需要了解16和10的表示方法。在16中,每个数字可以用0至9和字母A至F表示,其中A表示10,B表示11,以此类推。而在10中,每个数字可以用0至9表示。 接下来,我们可以使用emu8086提供的指令和寄存器来转换: 1. 将16数存储在寄存器中,比如AL或BL寄存器。 2. 使用指令MOV将寄存器中的16数转移到AX或BX寄存器中。 3. 使用指令CBW将AX或BX寄存器中的16位有符号数扩展为32位。 4. 使用指令CWD将AX或BX寄存器中的16位有符号数扩展为32位。 5. 使用指令DIV或IDIV除以10,将余数存储在AL寄存器中。 6. 重复步骤5,直到商为0。 7. 将每个余数相连接得到的数就是10表示的结果。 以上就是使用emu8086将16转换为10数的步骤。当然,这只是一种方法,您也可以使用其他的算法转换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值