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,如果有更好的方法,欢迎前来探讨

相关推荐
2301_800895102 天前
第十四届蓝桥杯国赛b组真题---备战国赛版h
算法·蓝桥杯·深度优先
WL_Aurora2 天前
备战蓝桥杯国赛【Day 12】
python·蓝桥杯
zyq99101_13 天前
递归与动态规划实战代码解析
python·算法·蓝桥杯
WL_Aurora3 天前
备战蓝桥杯国赛【Day 11】
python·蓝桥杯
WL_Aurora4 天前
备战蓝桥杯国赛【Day 10】
蓝桥杯
handler015 天前
速通蓝桥杯省一: 前缀和&差分(附经典例题)
c语言·c++·笔记·职场和发展·蓝桥杯
WL_Aurora5 天前
备战蓝桥杯国赛【Day 9】
python·算法·蓝桥杯
WL_Aurora6 天前
备战蓝桥杯国赛【Day 8】
算法·蓝桥杯
良木生香6 天前
【C++初阶】STL——List从入门到应用完全指南(1)
开发语言·数据结构·c++·程序人生·算法·蓝桥杯·学习方法
故事和你916 天前
蓝桥杯-2026年C++B组省赛
开发语言·数据结构·c++·算法·蓝桥杯·动态规划·图论