洛谷B3849 [GESP样题 三级] 进制转换

题目链接:https://www.luogu.com.cn/problem/B3849

[GESP样题 三级] 进制转换

题目描述

小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?在十六进制中,用 A 表示 10、F 表示 15。如果扩展到用 Z 表示 35,岂不是可以表示 36 进制数了嘛!

所以,你需要帮助她写一个程序,完成十进制转 R 进制(2<=R<=36)的工作。

输入格式

输入两行,第一行包含一个正整数 N,第二行包含一个正整数 R,保证 1<=N<=10^6。

输出格式

输出一行,为 N 的 R 进制表示。

样例 #1

样例输入 #1

123
25

样例输出 #1

4N

思路:

为了将十进制数转换为任意给定的 R 进制(2≤R≤36),我们可以使用除 R 取余的方法来逐位计算 R 进制的每一位。注意,当 R 大于 10 时,我们需要使用字符 'A' 到 'Z' 来表示 10 到 35

AC代码如下:

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

// 函数:将十进制数转换为R进制字符串  
string decToBaseR(int N, int R) {
	string result = "";
	// 处理特殊情况:当N为0时,直接返回"0"  
	if (N == 0) return "0";

	// 逐位计算R进制表示  
	while (N > 0) {
		int remainder = N % R; // 计算余数  
		if (remainder < 10) {
			result = char(remainder + '0') + result; // 余数小于10,直接转换为字符  
		}
		else {
			result = char(remainder - 10 + 'A') + result; // 余数大于等于10,转换为'A'-'Z'  
		}
		N /= R; // 更新N为商  
	}

	return result;
}

int main() {
	int N, R;
	cin >> N >> R; // 读取十进制数和进制数  

	// 调用函数并输出结果  
	cout << decToBaseR(N, R) << endl;

	return 0;
}
posted @ 2024-07-22 12:43  Tomorrowland_D  阅读(11)  评论(0编辑  收藏  举报