P1143 进制转换(洛谷题面

题目

题目描述:

请你编一程序实现两种不同进制之间的数据转换。

输入格式:

共三行,第一行是一个正整数,表示需要转换的数的进制 n (2n16)n\ (2\le n\le 16),第二行是一个 nn 进制数,若 n>10n>10 则用大写字母 AF\verb!A!\sim \verb!F! 表示数码 101510\sim 15,并且该 nn 进制数对应的十进制的值不超过 10910^9,第三行也是一个正整数,表示转换之后的数的进制 m (2m16)m\ (2\le m\le 16)

输出格式:

一个正整数,表示转换之后的 mm 进制数。

数据范围与说明:

输入输出样例 #1

输入:

1
2
3
16
FF
2

输出:

1
11111111

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m,num=0;
string s;
cin>>n;
cin>>s;
cin>>m;
reverse(s.begin(),s.end());
for(int i=0;i<s.size();i++){
if(s[i]>='A'&&s[i]<='F'){
num+=(s[i]-55)*pow(n,i);
}else{
num+=(s[i]-'0')*pow(n,i);
}
}
string ans;
while(num){
int tmp=num%m;
if(tmp>10){
ans.push_back(tmp+55);
}else{
ans.push_back(tmp+'0');
}
num/=m;
}
reverse(ans.begin(),ans.end());
cout<<ans;
return 0;
}