【洛谷OJ】【JAVA】P1017 进制转换

https://www.luogu.org/problemnew/show/P1017

顺便了解一下取模的计算,可以参考WIKI:https://en.wikipedia.org/wiki/Modulo_operation

给定一个正整数q,任意一个整数a,一定存在等式 :

a =nq + r;

其中 n、r 是整数,且 0 ≤ r < q,则称 n 为a 除以 q 的商,r 为 a 除以 q 的余数。

当r非零时,商取正数或负数,和使用的编程语言有关,具体有如下三种可能:

(1)大部分实现采用截断的方式,即q=trunc(a/n),向0所在方向取整,如3/2=1

(2)第二种是采用floor function(可以理解为向下取整),即q = ⌊a/n⌋,余数的符号和除数保持一致,即使余数已经是负数了,仍然向下取整,即3/-2=-2

(3)还有一类是余数总是正的,即0 ≤ r,即:

等价于:

 

其中:

 

也即:

因此:

import java.util.Scanner;

public class Main {
	private static Scanner cin;
	
	public static void main(String args[]) throws Exception {
		cin = new Scanner(System.in);
		int n = cin.nextInt();
		int r = cin.nextInt();
		int t = n;
		int modRet;
		StringBuilder sb = new StringBuilder("");
		while(t/r != 0 || t%r!=0) {
			modRet = t%r;
			//如果取模后结果为负数,t/r的结果需要向高位借1
			if(modRet < 0) {
				t = t/r + 1;
				modRet = modRet - r;
			}
			else {
				t = t/r;
			}
			sb.insert(0, modRet>9?(char)(modRet+55):(char)(modRet+48));
		}
		sb.insert(0,String.format("%d=", n));
		sb.append("(base"+r+")");
		System.out.println(sb.toString());
	}
}

 

你可能感兴趣的:(JAVA,OJ)