欢乐赛#67 T5 题解
2026-02-15 22:13:42
发布于:云南
2阅读
0回复
0点赞
题目大意
@skirmish 在学习进制转换。他想问你:把十进制整数 转换为哪一种进制表示时,表示结果中“字母“的数量在进制数的总字符数的占比最大?如果多个进制的字母占比相同,输出较小的进制。
解题思路
不算太大的模拟。
对于 的每一个进制:
先转进制。转 进制的方法是:除以 取余,倒序排列。
再计算出字母的数量,除以总字符数求出占比。
最后比较出 个进制中占比最大的即可。
Code
#include <bits/stdc++.h>
using namespace std;
long long t,n;//见祖宗
string trans(long long num,int b){//十转 b
if (num==0){
return "0";
}
string res="";
while (num){
res=char(num%b+'0'+7*(num%b>=10))+res;//0->'0',+48; 10->'A',+55 取差值7
num/=b;
}
return res;
}
double cnt(long long num,int b){//计算占比
string s=trans(num,b);
long long res=0;
for (long long i=0;s[i];i++){
if (s[i]>='A'){
res++;
}
}
return 1.0*res/s.size();//必须要 *1.0,否则两个整数相除结果向下取整
}
int main(){
cin>>t;
while (t--){
cin>>n;
double mx=-1;//必须是负数,否则占比 0% 的情况会输出 0
int ans=0;
for (int i=2;i<=36;i++){
if (cnt(n,i)>mx){//用 > 才能保证如果多个进制的字母占比相同,输出较小的进制
mx=cnt(n,i);
ans=i;
}
}
cout<<ans<<'\n';
}
return 0;
}
这里空空如也







有帮助,赞一个