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

相关推荐
Ivanqhz6 天前
NFM(神经因子分解机)
开发语言·javascript·人工智能·算法·蓝桥杯
变量未定义~10 天前
单调栈、单调队列(模板)、子矩阵(模板)
数据结构·算法·蓝桥杯
智者知已应修善业12 天前
【P12159蓝桥杯数组翻转】2025-4-24
c语言·c++·经验分享·笔记·算法·蓝桥杯
码云数智-大飞14 天前
从 OC 平滑迁移 Swift 完整方案
职场和发展·蓝桥杯
嘿黑嘿呦1 个月前
chap 8排序
算法·蓝桥杯·排序算法·软件工程
林森lsjs1 个月前
【日耕一题】5. 青春常数(17届蓝桥杯C++B组第一题)
算法·蓝桥杯
Y_Bk1 个月前
第十七届蓝桥杯C/C++A组省赛
c语言·数据结构·c++·算法·蓝桥杯
2601_961845421 个月前
高考真题试卷电子版|2025高考全科试卷分类下载
考研·面试·蓝桥杯·远程工作·程序员创富·高考
2601_961194021 个月前
教资科三美术考什么|初中高中美术题型考点和模板资料
leetcode·elasticsearch·职场和发展·蓝桥杯·pat考试·lucene
h_a_o777oah1 个月前
2026 蓝桥杯软件 C++B组 国赛比赛经历及备赛建议
c++·经验分享·算法·蓝桥杯