专栏文章

B3619 10 进制转 x 进制 题解

B3619题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minoarcg
此快照首次捕获于
2025/12/02 05:40
3 个月前
此快照最后确认于
2025/12/02 05:40
3 个月前
查看原文
这道题就是一道板子题。
1010 进制转 xx 进制最主要的方法就是短除法。
例如, 1010 进制数 8989 转成 22 进制数使用短除法的过程就如 1.1图1.1 所示。
1.1图1.1
短除法除到商为 00 时,就除完了,再将每一步除得的余数从下到上排列就是得出的答案。
1.1图1.1 所示, 1010 进制数 8989 转成 22 进制就是 (1011001)2(1011001)_2
我们需要做的就是把这个过程用代码模拟一遍。
那怎么实现呢?
具体如下:
CPP
string answer = ""; // 存储最终答案
while (num) { // 模拟短除法并取余
  if (num % x >= 10) answer += num % x - 10 + 'A';
  else answer += num % x + '0';
  num /= x;
}
做完短除法后,一定要将 answeranswer 反转一遍。
因为我们是边除边存储余数,在短除法中就是从上到下存储,但我们应该从下到上存储。
反转 answeranswer 的代码如下:
CPP
reverse(answer.begin(), answer.end()); // 反转字符串 
最后,把代码拼起来就完事了。

完整代码:

CPP
#include <bits/stdc++.h>
using namespace std;

int main() {
	int num, x;
	cin >> num >> x;
	string answer = ""; // 存储最终答案
	while (num) { // 模拟短除法并取余
		if (num % x >= 10) answer += num % x - 10 + 'A';
		else answer += num % x + '0';
		num /= x;
	}
	reverse(answer.begin(), answer.end()); // 反转字符串 
	cout << answer; // 输出答案 
	
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...