因此,对于家庭作业,我们必须制作一个程序,将数字从一个基数转换为另一个基数(即以 2 为底数的 110 转换为以 10 为底数的 6(。我问我的朋友他是怎么做到的,因为我遇到了麻烦,他只是给我发了他的代码,没有别的。有人可以解释这段代码的逻辑,以便我可以制作自己的程序并真正了解如何解决这个问题。谢谢!
import java.util.*;
public class Base_Converter {
public static final String value = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static void main(String args[]){
int x, y;
String num, base10 = "";
Scanner scan = new Scanner(System.in);
System.out.println("Enter a number you want to convert.");
num = scan.nextLine();
num = num.toUpperCase();
System.out.println("What base is it in?");
x = scan.nextInt();
System.out.println("What base do you want to convert it to?");
y = scan.nextInt();
if(x <= 36 && y <= 36 && x > 1 && y > 1){
base10 = toBase10(num,x);
num = newBase(base10,y);
System.out.println(num);
}
}
public static String toBase10(String num, int from){
long total = 0;
int counter = num.length();
char[] stringArray = num.toCharArray();
for(char w : stringArray){
counter--;
total += value.indexOf(w)*Math.pow(from,counter);
}
return String.valueOf(total);
}
public static String newBase(String num, int to){
String total = "";
int current = 0;
while(Integer.valueOf(num) > 0){
current = Integer.valueOf(num)%to;
total = value.charAt(current)+total;
num = String.valueOf(Integer.valueOf(num)/to);
}
return total;
}
}
我认为你不应该关注你朋友的代码做了什么,而应该关注如何自己完成作业,因为我认为你的问题在于你缺乏理解。与其让你高高在上,不如带你了解基础转换的一些细节。
首先,读取用户输入。看起来您正在使用Java,因此只需使用扫描仪即可执行此操作。至少您需要读取要转换的数字,它是什么基数,以及输出将是什么基数。
接下来,我们要转换数字。您可以直接将数字相互转换(即将基数 2 转换为基数 8(,但这需要比我现在愿意提供的更多的脑力。相反,我建议始终首先将用户输入的数字转换为 10 基数(就像您的朋友所做的那样(。那么我们如何将未知基数的数字转换为 10 基数呢?
因此,让我们分解一个数字是如何表示的:假设我们有以十为基数的数字234
。这相当于 4*10^0 + 3*10^1 + 2*10^2
或 4 + 30 + 200 = 234
。您可以对任何其他数字使用相同的转换。即,如果数字以 8 为基数1763
,则以 10 为基数的值将为 3*8^0 + 6*8^1 + 7*8^2 + 1*8^3
或 3 + 48 + 448 + 512 = 1011 base 10
(尝试在此处输入 1763 以证明。因此,要转换为十进制,您只需要看到将每个单独的数字乘以您的基数的幂减去 1。例如,由于1
是1763
中的第四个数字,因此将其乘以8^(4-1)
。因为,您正在从用户那里读取字符串。您需要使用 ascii 图表将字符串的每个字符转换为整数。
现在从十进制转换为任何东西。您无需乘法,只需将每个值除以并写入余数即可!我会让其他人描述这个过程。
现在只需将此新值存储为字符串,执行以下操作
String output = "";
output += newValue;
在计算机科学中,仅仅复制别人的代码弊大于利。希望这有帮助!