很苦逼的是,由于对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();
}
}