P12121 [蓝桥杯 2024 省 B 第二场] 进制(C++)

看到一道很有意思的算法题

这道题目说人话就是,这个数字给你转换进制,范围为11~36,哪一种转换方式不含字母,它给了个例子,2558转16进制是a1c,含有字母a和c,那16进制就不符合题目要求,要排除16,既然给的范围那么大,那干脆就写个程序让机器算,暴力解法一个一个算过去,看看哪个只包含数字

复制代码
#include <bits/stdc++.h>
using namespace std;
long long a, b, n[10001];

int main() {
	long long num = 8100178706957568;
	const char zifu[] = "0123456789abcdefghijklmnopqrstuvwxyz";
	for (int r = 11; r < 36; r++) {
		cout << r << "进制转换为:";
		long long d = 0;
		a = num;
		while (a != 0) {
			b = a % r;
			a /= r;
			d++;
			n[d] = b;
		}
		
		for (int i = d; i >= 1; i--) {
			if (n[i] > 9) {
				cout << zifu[n[i]];
			}
			else {
				cout << n[i];
			}
		}
		cout << endl;
		
	}
}

可能你会觉得太麻烦了,一个一个看过去万一看错了怎么办,没事,还有一个更直观的方法,加个bool类型的变量来判断

复制代码
#include <bits/stdc++.h>
using namespace std;
long long a, b, n[10001];

int main() {
	long long num = 8100178706957568;
	
	for (int r = 11; r < 36; r++) {
		cout << r << "进制转换为:";
		long long d = 0;
		a = num;
		while (a != 0) {
			b = a % r;
			a /= r;
			d++;
			n[d] = b;
		}
		bool flag = true;
		for (int i = d; i >= 1; i--) {
			
			if (n[i] > 9) {
				flag = false;
			}
		}
		cout << flag << endl;
	}
}

综上所述,答案是32,如果有更好的方法,欢迎前来探讨

相关推荐
aqiu1111119 天前
【数位 DP / 记忆化搜索】蓝桥云课 - 光轨区的 AI 数 题解
c++·算法·蓝桥杯·数位dp
aqiu11111111 天前
【并查集 / 图论】蓝桥云课 - 魔法大陆的城市群(求无向图连通块数量)题解
蓝桥杯·图论
aqiu11111112 天前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
Chester_199913 天前
CSP202312C.树上搜索
开发语言·数据结构·c++·蓝桥杯·stl
CoderYanger15 天前
A.每日一题:3622. 判断整除性
java·程序人生·算法·leetcode·面试·职场和发展·蓝桥杯
Chester_199916 天前
CSP202303C.LDAP
开发语言·c++·蓝桥杯·stl
Chester_199920 天前
CSP202206C.角色授权
开发语言·数据结构·c++·蓝桥杯
Chester_199920 天前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
Chester_199924 天前
CSP202104C.DHCP服务器
开发语言·程序人生·蓝桥杯
_Narcissus_1 个月前
二分算法笔记及例题
数据结构·c++·笔记·算法·蓝桥杯·查找·二分算法