一切都与进制有关【USACO 2015 January Contest Bronze】
一切都与进制有关
奶牛贝茜一直在她的牛栏中学习计算机课,最近她在致力于学习不同进制下的数字表示。
回想一下,B 进制数字的数位从右到左依次代表 1,B,B2,B3 等等。
例如,在 10 进制下数位从右到左依次代表 1,10,100 等等。
数字序列 1234,在 10 进制下,实际上表示 1(1000)+2(100)+3(10)+4(1),而在 5 进制下,则表示 1(125)+2(25)+3(5)+4(1),这在 10 进制下等于 194。
贝茜注意到,同一数字序列在越高的进制下,表示的数值也就越大,例如 7 进制下的 1234 大于 6 进制下的 1234。
在 B 进制下写数字时,每个数字的范围可以从 0 到 B−1。
例如,10 进制下的每个数字都在 0∼9 的范围内,而 5 进制下的每个数字都在 0∼4 的范围内。
当然,也存在进制超过 10 的数字,比如计算机科学家经常使用 16 进制表示数字,其中字母 A∼F 表示数值 10∼15。
例如,16 进制下的 BEEF 实际上表示 11(4096)+14(256)+14(16)+15,这在十进制下相加等于 48879。
贝茜对使用超过 10 的进制表示数字很感兴趣。
她选取一个整数 N,并写出其在 X 进制以及 Y 进制下的表示。
有趣的是两种表示都是 3 位数字序列,且每个数字都在 1∼9 的范围内。
不幸的是,贝茜把 N,X,Y 都忘记了!
现在,按顺序给出她写下的两个三位数字,请帮她确定 X 和 Y。
输入格式
第一行包含整数 K,表示共有 K 组测试数据。
每组数据占一行,包含两个三位数字,分别表示 N 在 X 进制以及 Y 进制下的表示。
输出格式
共 K 行,每行输出一组测试数据对应的 X,Y。
保证每组数据都存在唯一解。
数据范围
10≤X,Y≤15000,
1≤K≤100
输入样例:
1
419 792
输出样例:
47 35
样例解释
数字 8892 在 47 进制下表示为 419,在 35 进制下表示为 792。
代码
点击查看代码
#include<iostream>
using namespace std;
int get(int x,int k){
return x/100*k*k+x/10%10*k+x%10;
}
int main(){
int k,x,y;
cin >> k;
while(k --){
cin >> x >> y;
for(int i = 10; i <= 15000; i ++ ){
int t = get(x,i);
int l = 10,r = 15000,mid;
while(l < r){
mid = (l + r) >> 1;
if(get(y,mid) >= t)r = mid;
else l = mid + 1;
}
if(get(y,r) == t){
cout << i << " " << r << '\n';
break;
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】