一道迅雷编程题题

很苦逼的是,由于对java可以直接用的方法不是特别熟悉,所以走了好多弯路,比如下面这道题,需要用到将整数转换成进制的数,然而之前不知道Integer有这个方法:

Integer.toString(int i, int radix)

所以自己写了个算法来转换:

贴上全部代码:

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int a = in.nextInt();
            System.out.println(getResult(a));
        }
    }
    
    /**
     * 计算一个整数的二进制、三进制、四进制、五进制形式下的位数和
     * 如 a = 5
     * 二进制为:101
     * 三进制为: 12
     * 四进制为: 11
     * 五进制为: 10
     * 则结果为: 1+0+1 + 1+2 + 1+1 + 1+0 = 8
     * @param a 需要计算的整数
     * @return
     */
    public static int getResult(int a) {
    	StringBuilder builder = new StringBuilder();
    	builder.append(hexConversion(a,2))
    	.append(hexConversion(a,3))
    	.append(hexConversion(a,4))
    	.append(hexConversion(a,5));
    	int result = 0;
    	for(int i = 0; i<builder.length(); i++){
    		if(builder.charAt(i)!='0'){
    			result = result + Integer.parseInt(String.valueOf(builder.charAt(i)));
    		}
    	}
    	return result;
    }
    
    /**
     * 进制转换方法
     * @param a 需要转换的十进制整数
     * @param b 转换成多少进制
     * @return
     */
    public static String hexConversion(int a, int b) {
    	StringBuilder builder = new StringBuilder();
    	int num = a;
        int n = 1;
        int temp = 1;
        int pos = 0;       
        boolean firstTime = true;
        while(true) {
        	temp = temp*b;
        	if(temp > num) {
        		while(n < pos -1 && !firstTime) {   			
        			builder.append("0");
        			pos = pos - 1;
        		}
        		firstTime = false;
        		int tmp = num / (temp/b);
        		builder.append(tmp+"");
        		if(temp/b < b) {
        			num = a;
        			firstTime = true;
        			while(pos-1!=1) {
        				builder.append("0");
        				pos --;
        			}
        			break;
        		}
        		pos = n;
        		num = num - (temp/b)*tmp;
        		n = 1;
        		temp = 1;      		
        	} else {   
        		n ++ ;
        	}
        }
        if(b==2) System.out.println("该数的二进制标识为"+builder.toString());
        if(b==3) System.out.println("该数的三进制标识为"+builder.toString());
        if(b==4) System.out.println("该数的四进制标识为"+builder.toString());
        if(b==5) System.out.println("该数的五进制标识为"+builder.toString());
        
        System.out.println("88的四进制数为:"+Integer.toString(88,4));
        return builder.toString(); 
    }
    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值