洛谷题单指南-数学基础问题-P1143 进制转换

原题链接:https://www.luogu.com.cn/problem/P1143

题意解读:进制转换的模版题,n进制转10进制,10进制转m进制。

解题思路:

1、对于n进制数转10进制,如abcd转10进制,根据定义是a*n^3 + b*n^2 + c*n + d,在程序中迭代处理:

for(int i = 0; i < s.length(); i++) dec = dec * n + s[i]

需要注意的是,要把每一个字符转成整数再计算,'0'~'9'直接转为0~9,'A'~'F'转为10~15

2、对于10进制整数转m进制,采用除m取余法,注意余数要逆序输出,10-15要输出'A'~'F'

100分代码:

#include <bits/stdc++.h>
using namespace std;

int n, m;
string a;

int getnum(char c)
{
    int res = 0;
    if(c >= '0' && c <= '9') res = c - '0';
    if(c >= 'A' && c <= 'F') res = c - 'A' + 10;
    return res;
}

char getchar(int x)
{
    char res = '0';
    if(x >= 0 && x <= 9) res = x + '0';
    if(x >= 10) res = x - 10 + 'A';
    return res;
}

int main()
{
    cin >> n >> a >> m;

    //先将n进制转10进制
    int dec = 0;
    for(int i = 0; i < a.length(); i++)
    {
        dec = dec * n + getnum(a[i]); 
    }

    //再将十进制转m进制
    vector<int> ans;
    while(dec)
    {
        int r = dec % m;
        ans.push_back(r);
        dec = dec / m;
    }
    for(int i = ans.size() - 1; i >= 0; i--) cout << getchar(ans[i]);
    return 0;
}

 

posted @ 2024-04-07 09:26  五月江城  阅读(115)  评论(0编辑  收藏  举报