题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。
输出格式
一个正整数,表示转换之后的m进制数。
洛谷 数学1开篇水题,思路比较简单,把n进制数以字符串形式读入,然后将每位处理成0-15的形式存入数组,随后转为十进制数,再将十进制数转为想要的m进制。
本题主要是注意一下A-F输入和输出的处理
代码如下
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
ll k;
int b[105];//存n进制数的数组
int c[105];//存m进制数的数组
string a;
int main()
{
cin>>n;
cin>>a;
cin>>m;
int po=0;//标识位数
int cnt=0;
for(int i=0;i<a.length();i++) //字符串转数组
{
if(48<=a[i]&&a[i]<=57)
b[++cnt]=a[i]-48;
if(65<=a[i]&&a[i]<=70)
b[++cnt]=a[i]-'A'+10;
}
for(int i=cnt;i>=1;i--)//转十进制
{
k+=b[i]*pow(n,po);
++po;
}
cnt=0;
while(k>0)//转n进制
{
c[++cnt]=k%m;
k/=m;
}
for(int i=cnt;i>=1;i--)//处理输出
{
if(c[i]>=10)
cout<<char(c[i]+'A'-10);
else
cout<<c[i];
}
return 0;
}