我正在尝试编写一个基本的计算器。我希望我的计算器有一个基本算术转换器,当你输入一个基数为10的整数时,它会给出一个输出。
我试图自己编写代码,花了将近3个小时来弄清楚如何将数字转换为给定的基数并且它到目前为止工作得很好但我有一个问题 - 当我尝试转换时一个整数到基数2(二进制)我的计算器不适用于大于1025的数字。
我认为问题是因为有一个整数可以容纳的最大值,所以我尝试了“BigInteger”,但由于它不支持余数“%”操作,我无法使其工作。
else if(c.equals("Base")) {
g = 0;
l = 0;
System.out.println("Enter the number (Integer) you want to convert");
f = scan.nextInt();
System.out.println("Enter the arithmetic base you want for your new number");
m = scan.nextInt();
for (;f>=1;) {
h=f%m;
f=f/m;
k = (int)Math.pow(10,g);
g++;
l =l + (h*k);
}
System.out.println(l);
}
很抱歉,如果代码非常糟糕且有更多有效的方法,我只是希望它是我的,而不是查找它。
答案 0 :(得分:1)
如果要使用BigInteger
类,则可以使用mod方法代替“%”。
BigInteger myBigInteger = new BigInteger("943838859");
System.out.println(myBigInteger.mod(BigInteger.TEN));
这将打印9。
答案 1 :(得分:0)
存储"二进制表示"不是一个好主意。在int变量中,因为它将您限制为10位数。
相反,您可以使用String
变量来保存结果:
String l = "";
while (f > 0) {
h = f % m;
f = f / m;
l = h + l;
}
System.out.println(l);
答案 2 :(得分:0)
这是我自己尝试的方式(modulo / divide / add):
int decimalOrBinary = 345;
StringBuilder builder = new StringBuilder();
do {
builder.append(decimalOrBinary % 2);
decimalOrBinary = decimalOrBinary / 2;
} while (decimalOrBinary > 0);
System.out.println(builder.reverse().toString()); //prints 101011001
答案 3 :(得分:0)
您可以使用递归功能在3行代码中完成此操作,
public static String convertToBase(int n, int b) {
return n > 0 ? (convertToBase(n / b, b) + n % b) : "";
}