洛谷 P1143. 进制转换

发布时间 2023-09-19 22:04:48作者: BottomchouFENG

进制转换

题目描述

请你编一程序实现两种不同进制之间的数据转换。

输入格式

共三行,第一行是一个正整数,表示需要转换的数的进制 $n\ (2\le n\le 16)$,第二行是一个 $n$ 进制数,若 $n>10$ 则用大写字母 $\verb!A!\sim \verb!F!$ 表示数码 $10\sim 15$,并且该 $n$ 进制数对应的十进制的值不超过 $10^9$,第三行也是一个正整数,表示转换之后的数的进制 $m\ (2\le m\le 16)$。

输出格式

一个正整数,表示转换之后的 $m$ 进制数。

样例 #1

样例输入 #1

16
FF
2

样例输出 #1

11111111

前置知识进制转换

先将 $n$ 进制转十进制,最后递归输出 $m$ 进制。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;

const int N = 100;
int n, m, t = 1, ss;
char s[N];

void print(int x) // 输出
{
  if (x >= m) print(x / m);
  putchar(x % m > 9 ? x % m - 10 + 'A' : x % m + '0');
}

int main()
{
  // freopen(".in", "r", stdin);
  // freopen(".out", "w", stdout);
  cin >> n >> s >> m;
  for (int i = strlen(s) - 1; i >= 0; -- i) // 转十进制
  {
    if (isdigit(s[i])) ss += (s[i] - '0') * t;
    else ss += (s[i] - 'A' + 10) * t;
    t *= n;
  }
  print(ss);
  // fclose(stdin);
  // fclose(stdout);
  return 0;
}