文章目录
正整数的任意进制转换
正整数的任意进制转换
时间限制: 1 Sec 内存限制: 128 MB
题目描述
将 p 进制 n 转换为 q 进制。p 和 q 的取值范围为[2,36],其中,用到的数码按从小到大依次为:0,1,2,3,4,5,6,7,8,9,A,B,…,Z,不考虑小写字母。
输入
一共1+m 行:
1行为 m,表示后面有 m 行(1 <= m <= 60).
其后的m行中,每行3个数: 进制p,p进制数n,以及进制 q。
三个数之间用逗号间隔。
n 的长度不超过50位。
输出
转换后的 q 进制数。
样例输入
6
18 2345678A123 18
15 23456 18
12 2345678 20
16 12345678 23
25 3456AB 21
18 AB1234567 22
样例输出
2345678A123
114E0
22B7A4
21A976L
7C2136
22JF0G367
AC代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
ll toTen(char a[], int bit)
{
int length = strlen(a);
ll i, b=1,sum=0; //i要做数组a的下标,注意其起止范围
for(i=length-1;i>=0;i-- )
{
if(a[i]>='A')
{
sum += (a[i]-'A'+10) *b;
b *= bit;
}
else
{
sum += (a[i]-'0') *b;
b *= bit;
}
}
return sum;
}
void tentoN(ll tenn,int m){
int r[500];
int j=0;
ll shang=tenn;
while(shang!=0){
r[j++]=shang%m;
shang=shang/m;
}
for(int i=j-1;i>=0;i--){
if(r[i]>=10){
printf("%c",r[i]-10+'A');
}else{
printf("%d",r[i]);
}
}
printf("\n");
}
int main()
{
int n;
char a[500];
char renyi[500];
int m;
ll tenn;
int t;scanf("%d",&t);
while(t --){
scanf("%d",&n);
scanf("%s",a);
scanf("%d",&m);
tenn=toTen(a,n);
tentoN(tenn,m);
}
return 0;
}