洛谷题单指南-数学基础问题-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;
}