UVA389 Basically Speaking JAVA解题代码

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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值