Bootstrap

关于java实现十进制转换为任意进制

这原本是Noip2000的一个题目
https://www.luogu.com.cn/problem/P1017
被我们的伟大的唯心主义编程大师拿来当成了作业题,我正好复习一下进制问题

首先十进制转换为任意进制我们需要考虑如下几种情况

1.转换为正数10十进制之内的进制

2.转换为正数10进制之外的进制

3.转换为负数进制

第一步普通的转换进制
通过简单地模拟就可以做到,无非是取余操作,然后把对应原数值除对应的进制

    r=n%t;
	 n/=t;

第二步考虑到负数进制问题
r可能会小于0
所以当r<0的时候让

r-=t;
n++;

第三步输出考虑r大于10的情况
大于10变成字母即可

'A'+r-10;

先上代码

package third;
import java.util.*;

public class first {

	public static void main(String[] args)
	{
		Scanner cin=new Scanner(System.in);
		int n,t;
	    n=cin.nextInt();
	    t=cin.nextInt();
	    Stack<Integer> s=new Stack<Integer>();
	    while(n!=0)
	    {
	    	int r=n%t;
	    	n/=t;
	    	if(r<0)
	    	{
	    		r-=t;
	    		n++;
	    	}
	    	s.push(r);
	    }
	    System.out.print("=");
	    while(!s.empty())
	    {
	    	if(s.peek()<10)
	    	{
	    		System.out.print(s.pop());
	    	}
	    	else
	    		System.out.print((char)('A'+s.pop()-10));
	    }
	    System.out.print("(base"+t+")");
	    cin.close();
	}
}

;