3438. 数制转换
求任意两个不同进制非负整数的转换(22 进制 ∼∼ 1616 进制),所给整数在 int 范围内。
不同进制的表示符号为(0,1,…,9,a,b,…,f0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F0,1,…,9,A,B,…,F)
输入格式
输入只有一行,包含三个整数 a,n,ba,n,b。aa 表示其后的 nn 是 aa 进制整数,bb 表示欲将 aa 进制整数 nn 转换成 bb 进制整数。
a,ba,b 是十进制整数。
数据可能存在包含前导零的情况。
输出格式
输出包含一行,该行有一个整数为转换后的 bb 进制数。
输出时字母符号全部用大写表示,即(0,1,…,9,A,B,…,F0,1,…,9,A,B,…,F)。
数据范围
2≤a,b≤162≤a,b≤16,
给定的 aa 进制整数 nn 在十进制下的取值范围是 [1,2147483647][1,2147483647]。
输入样例:
15 Aab3 7
输出样例:
210306
难度:简单 |
时/空限制:1s / 64MB |
总通过数:444 |
总尝试数:727 |
来源:北京大学考研机试题 |
算法标签 |
挑战模式
C++ C Java Python Javascript Python3 Go
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 100;
int arr[N];
void turn(int count,int b)
{
int c,cc;
c=count/b;
cc=count%b;
if(c)
turn(c,b);
if(cc<10)
cout << cc;
else
{
char k='A';
k+=cc;
k-=10;
cout << k;
}
}
int main()
{
int a,b;
string s;
cin >> a>>s>>b;
for (int i = 0; i < s.size(); i ++ )
if(s[i]>='0'&&s[i]<='9')
arr[i]=s[i]-'0';
else if(s[i]>='A'&&s[i]<='Z')
arr[i]=s[i]-'A'+10;
else
arr[i]=s[i]-'a'+10;
int cnt=0;
for (int i = 0; i < s.size(); i ++ )
{
cnt*=a;
cnt+=arr[i];
}
turn(cnt,b);
/*cout << endl;
cout << cnt;*/
}