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

发布时间:2024年01月24日

进制转换——题目描述

在一次 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;
}
文章来源:https://blog.csdn.net/zhangzhenjie_123/article/details/135765718
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。