关于进制转换及其应用的算法题总结

目录

[B3620 x 进制转 10 进制 - 洛谷](#B3620 x 进制转 10 进制 - 洛谷)

[B3619 10 进制转 x 进制 - 洛谷](#B3619 10 进制转 x 进制 - 洛谷)

[P1555 USACO11NOV 尴尬的数字 Awkward Digits B - 洛谷](#P1555 [USACO11NOV] 尴尬的数字 Awkward Digits B - 洛谷)


B3620 x 进制转 10 进制 - 洛谷

cpp 复制代码
// B3620 x 进制转 10 进制
#include <bits/stdc++.h>

using namespace std;
int n;
string num;
long long res = 0;

int char2int(char c){
  // 字符转换成int类型
  if (c >= '0' && c <= '9')
  { // 如果数字是在0-9之内的
    return c - '0';
  }
  else
    return c - 'A' + 10; // 如果数字是 A B C D 这种的
}

int main(){
  cin >> n;
  cin >> num;
  res = char2int(num[0]);
  // 类比2进制转换成10进制的过程
  for (int i = 1; i < num.size(); i++){
    // 从最高位开始
    res = res * n + char2int(num[i]);
  }
  cout << res;
  return 0;
}

B3619 10 进制转 x 进制 - 洛谷

cpp 复制代码
// B3619 10 进制转 x 进制
// 基于短除法
#include <bits/stdc++.h>

using namespace std;
long long n;
int x;
vector<char> res;

char int2char(int num){
  if (num >= 0 && num <= 9)
    return '0' + num;
  else
    return 'A' + num - 10;
}

int main(){
  cin >> n >> x;
  while (n >= x)
  {                    // 短除法除到最后n是小于x的
    int yuShu = n % x; // 取余数
    res.push_back(int2char(yuShu));
    n = n / x;
  }
  res.push_back(int2char(n)); // 别忘了n
  for (int i = res.size() - 1; i >= 0; i--)
    cout << res[i];
  // 短除法是先获取的低位后获取的高位,所以需要逆序输出
  return 0;
}

P1555 USACO11NOV 尴尬的数字 Awkward Digits B - 洛谷

cpp 复制代码
// P1555 [USACO11NOV] 尴尬的数字 Awkward Digits B
#include <bits/stdc++.h>

using namespace std;
string a, b;

int char2int(char c){
  // 字符转换成int类型
  if (c >= '0' && c <= '9')
  { // 如果数字是在0-9之内的
    return c - '0';
  }
  else
    return c - 'A' + 10; // 如果数字是 A B C D 这种的
}

long long x2Ten(string t, int n){
  // x进制转换10进制
  long long res = char2int(t[0]);
  // 类比2进制转换成10进制的过程
  for (int i = 1; i < t.size(); i++){
    // 从最高位开始
    res = res * n + char2int(t[i]);
  }
  return res;
}

bool jd(long long n){
  // 把新数转三进制,逐位和原三进制字符串b比,统计不同位数
  int idx = 0;
  int cnt = 0;
  while (n >= 3){
    int yuShu = n % 3;
    char tmp = b[b.size() - 1 - idx];
    if (char2int(tmp) != yuShu)  cnt++;
    n = n / 3;
    idx++;
    if (cnt > 1)  return false;
  }
  if (n != char2int(b[0]))  cnt++;
  if (cnt != 1 || idx != b.size() - 1)
    return false;
  // 如果不同的位数不等于1 或 n转成3进制后长度和b不一样那么就false
  return true;
}

int main(){
  cin >> a >> b;
  long long ta = x2Ten(a, 2);
  long long tb = x2Ten(b, 3);
  // // 从高位开始遍历 去改变2进制的某一位
  for (int i = 0; i < a.size(); i++){
    long long l = 1 << (a.size() - i - 1);
    long long ta_tmp = -1;
    if (a[i] == '0'){
      // 如果第i位是0 那么我们就把它变成1 那么ta就会加上 l
      ta_tmp = ta + l;
    }
    else
      ta_tmp = ta - l;
    if (jd(ta_tmp)){
      cout << ta_tmp;
      break;
    }
  }
  return 0;
}
相关推荐
huang5791471 小时前
哈希算法的抗碰撞机制与安全性增强策略4
算法
林浩杨_1 小时前
SIGIR 2026|南京大学:Video-GAR:“通过生成 Query 来验证视频语义理解”的生成增强范式
论文阅读·人工智能·算法
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出货船中的“独特载货量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Elsa️7462 小时前
算法一周刷题总结
c++·算法
风合星语2 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!2 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
小小程序猴12 小时前
深圳乘路资讯AI培训怎么样?课程靠谱吗?——一套课程可信度评估模型与实证分析
人工智能·算法
云上先途2 小时前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
welfare9622 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++
彧azz2 小时前
DFS与BFS:图遍历的两大核心算法
数据结构·学习·算法·深度优先·广度优先