南邮ACM 1012 进制转换 JAVA解法

进制转换

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte
总提交:1372            测试通过:400

描述

将一个十进制数N转换成R进制数输出,2≤R≤16,R≠10。

输入

多行。第一行指出以下一共有多少组数据,后续每行包含两个整数N和R,以空格分隔,-100000≤N≤100000,2≤R≤16,R≠10。

输出

多行。每行给出转换后的R进制数。

样例输入

3
7 2
23 12
-4 3

样例输出

111
1B
-11

提示

 

题目来源

GUOJ

俗话说得好,要做出题,必先知道做题的思路与做题的方法,是不
这题是道水题,但我们可以从中看出点东西,虽然是从十进制转换成其他进制 
思路 除几取余法
方法如下 
以第一个例子 7 2 
7%2=1 
7/2=3 
3%2=1 
3/2=1 
1%2=1 
1/2=0   //结束
结果是111
 
   

import java.util.Scanner;

public class ACM1012 {
	
	private static final char[] MyCharArray={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		for(int i=0;i<n;i++){
			int num=sc.nextInt();
			int r=sc.nextInt();
			fun(num,r);
		}
	}

	private static void fun(int num, int r) {
		boolean flag=false;//判断num是否为负数
		if(num<0){//处理时把负数转化成正数处理
			flag=true;
			num=-num;
		}
		if(num==0){//注意num为0时候的处理
			System.out.println("0");
			return;
		}
		
		int[] arr=new int[100];
		int n=0;
		while(num !=0){
			int temp=num/r;
			arr[n++]=num%r;
			num=temp;;
		}
		if(flag){
			System.out.print("-");
		}
		for(int i=n-1;i>=0;i--){
			System.out.print(MyCharArray[arr[i]]);
		}
		System.out.println();
	}

}


你可能感兴趣的:(java,ACM,进制转换)