UVA389 Basically Speaking,也就是进制转换,很基础的题目,只要掌握了进制转换的公式,就可以轻松的做出来,需要注意的事情都写在代码注释里了,直接贴代码
package Main;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String num;
int base,to;//base是当前进制,to是要转换的进制
while(in.hasNext())
{
num=in.next();
base=in.nextInt();
to=in.nextInt();
num=Exchange(num,base,to);
if(num.length()>7)//如题所述,当转换后长度超过7时,输出 ERROR,注意这里的ERROR也是需要占7位的
{
System.out.println(" ERROR");
continue;
}
System.out.println(num);
}
}
//为了省去字符与数字的转换,我选择直接用一个数组来存储,每一个的下标刚好对应了不同的十进制值
public static String Abc[] = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
public static String Exchange(String num,int base,int to)
{
StringBuilder s = new StringBuilder("");//由于JAVA不允许改变String的值,所以使用StringBuilder来进行字符串的处理
int sum=Dec(num,base);//获得num的十进制值
if(sum==0)
return " 0";
while(sum>0)
{
s.replace(0,0,Abc[sum%to]);//每次都将转换后的字符插在第一位,这样出来的字符串就是最后的转换结果
sum/=to;
}
while(s.length()<7)//由于Java的控制输出没有C/C++的顺手,所以我直接将它换成7位,而不是在最后输出的时候控制
{
s.insert(0," ");
}
return s.toString();//返回String在Main接收
}
public static int Dec(String num,int base)//这是将其他进制的数转换为相应的十进制的值函数
{
int sum=0;
for(int i=0;i<num.length();i++){
if(num.charAt(i)>='A'&&num.charAt(i)<='Z')
sum=sum*base+num.charAt(i)-'A'+10;
else
sum=sum*base+num.charAt(i)-'0';
}
return sum;
}
}