题目(北大)
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
做法
使用 java 的 BigInteger类
代码
import java.math.BigInteger;
import java.util.Scanner;
import java.util.Vector;
public class Main {
public static void main(String[] args) {
String s1 = new String();
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()) {
s1 = scanner.nextLine(); // 输入一个十进制数
// System.out.println(s1);
BigInteger b1 = new BigInteger(s1);
BigInteger b2 = new BigInteger("2");
BigInteger zero = new BigInteger("0");
Vector<BigInteger> v = new Vector<BigInteger>(); // 十进制转换为二进制数
BigInteger[] arr = b1.divideAndRemainder(b2);
v.add(arr[1]); // 存储余数
BigInteger div = arr[0];
while(!arr[0].equals(zero)) {
arr = div.divideAndRemainder(b2);
// System.out.println(arr[0] + " " + arr[1]);
v.add(arr[1]);
div = div.divide(b2);
}
// v 中存储的即为逆序的二进制数
// 将二进制数转换为十进制数
for(int i = v.size()-1; i >= 0; i--) {
System.out.print(v.get(i));
}
System.out.println("");
}
scanner.close();
}
}