AcWing 124. 数的进制转换(java)
原题链接
简单
作者:
fly123
,
2020-08-24 15:09:07
,
所有人可见
,
阅读 885
import java.util.*;
class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
String res="";//存放结果字符串
for(int i=0;i<n;i++){
int a=sc.nextInt();
int b=sc.nextInt();
String s=sc.next();
int length=s.length();
ArrayList number=new ArrayList<>();//存放字符串中的数
for(int j=0;j<length;j++){
if(s.charAt(j)>='0'&&s.charAt(j)<='9')number.add(s.charAt(j)-'0');
else if(s.charAt(j)>='A'&&s.charAt(j)<='Z')number.add(s.charAt(j)-'A'+10);
else if(s.charAt(j)>='a'&&s.charAt(j)<='z')number.add(s.charAt(j)-'a'+36);
}
Collections.reverse(number);//
ArrayList<Integer> ans=new ArrayList<>();//存放余数
while(number.size()>0){
int r=0;
for(int k=number.size()-1;k>=0;k--){
int temp=(int)number.get(k)+a*r;//要将Integer向下转型为int,不然会报错
r=temp%b;
number.set(k,temp/b);//set方法的形参是(修改的索引位置,要修改为多少)
}
ans.add(r);
while(number.size()>0&&number.get(number.size()-1).equals(0))number.remove(number.size()-1);//注意下标别越界,remove方法会删除元素,并且会更新size
}
Collections.reverse(ans);
for(int x:ans){
if(x>=0&&x<=9)res+=(char)(x+'0');//这里必须要加强转,不然会变成int型,结果会错
if(x>=10&&x<=35)res+=(char)(x-10+'A');
if(x>=36)res+=(char)(x-36+'a');
}
System.out.println(a+" "+s);
System.out.println(b+" "+res);
System.out.println();
res="";//每次要将其重置,当然也可以放在循环里面,免得要重置了
}
}
}