【洛谷】P1143 进制转换

题目地址:

https://www.luogu.com.cn/problem/P1143

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

输入格式:
共三行,第一行是一个正整数,表示需要转换的数的进制 n ( 2 ≤ n ≤ 16 ) n(2≤n≤16) n(2n16),第二行是一个 n n n进制数,若 n > 10 n>10 n>10则用大写字母 A ∼ F A\sim F AF表示数码 10 ∼ 15 10\sim 15 1015,并且该 n n n进制数对应的十进制的值不超过 1000000000 1000000000 1000000000,第三行也是一个正整数,表示转换之后的数的进制 m ( 2 ≤ m ≤ 16 ) m(2≤m≤16) m(2m16)

输出格式:
一个正整数,表示转换之后的 m m m进制数。

进制转换。代码如下:

#include <iostream>
#include <algorithm>
using namespace std;

int n, m;

int main() {
    string s;
    long x = 0;
    cin >> n >> s >> m;
    
    for (int i = 0; i < s.size(); i++) {
        x *= n;
        if (isdigit(s[i])) x += s[i] - '0';
        else x += s[i] - 'A' + 10;
    }

    s.clear();
    while (x) {
        int c = x % m;
        if (c >= 10) s += 'A' + c - 10;
        else s += to_string(c);
        x /= m;
    }

    if (!s.size()) puts("0");

    reverse(s.begin(), s.end());
    cout << s << endl;

    return 0;
}

时空复杂度 O ( log ⁡ n x + log ⁡ m x ) O(\log_n x+\log_m x) O(lognx+logmx) x x x是要被转化的数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值