进制转换(C++)(简易)(字符串)

进制转换——题目描述

在一次 NOIP 初赛模拟考试中,小明碰到了一道进制转换的题,由于没有学过进制转换,导致成绩不理想,于是他下决心搞明白进制转换是怎么回事。通过查阅资料他发现,进制有很多种,通常的有二进制、八进制、十进制和十六进制等。如果不超过十进制,0到9 的十个数字就够用了,但超过十进制时,两位数字需要用一个字符去表示。通常用大写字母A表示十进制中的10,用大写字母B表示十进制中的11,用大写字母 C表示十进制中的12,用大写字母D表示十进制中的13,用大写字母E表示十进制中的14,用大写字母F表示十进制中的15,以此类推。

现在他想编写一个程序,将一个任意的 n 进制数转换成 m 进制的数。

输入格式
第一行仅有一个正整数 n (2≤n≤16),表示给定数是一个 n 进制数。
第二行是一个字符串,描述一个合法的 n 进制正数。
第三行仅有一个正整数 m (2≤m≤16),表示要将给定的 n 进制数转换成 m 进制数。

注意: 所给的 n 进制数在其对应的 10 进制数中大小不会超过 10⁹。

输出格式
一行,输出转换成 m 进制的数。

样例输入

2
101101
10

样例输出

45

代码:

#include <iostream>
#include <string>
using namespace std;
int k, ans = 0,si,k2; 
string n;
int main() {
    cin >>k>> n>>k2;
    si=n.size();
    for (int i = 0; i < si; i++){
        if (n[i] >= '0' && n[i] <= '9'){
            ans = ans * k + n[i] - '0';
        } else {
            ans = ans * k + n[i] - 'A' + 10;
        }
    }
    int digit[25];
    int cnt=0;
    while (ans) {
        digit[cnt++] = ans % k2;
        ans /= k2;
    }
    for (int i = cnt - 1; i >= 0; i--) {
        if (digit[i] < 10) {
            cout << digit[i];
        } else {
            cout << char(digit[i] - 10 + 'A');
        }
    }
    cout << endl;
    return 0;
}
  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值