我有一个家庭作业,我必须将任何基础转换为基础10.我有一些给定的数字,它们是" basen"。我必须将这些基数转换为基数10.我陷入的唯一部分是代码的这一部分:
answer = ; // Not sure what I have to put in here
我已经看过其他一些关于转换到十号的帖子,但我不知道如何将它们合并到我的代码中。
public class BaseN {
public static final int BASEN_ERRNO = -1;
public static int digit = 0;
public static void main(String[] argv) {
basen(512, 6);
basen(314, 8);
basen(49, 5);
basen(10101, 2);
}
public static void basen(int n, int b) {
int ans = basen(n, b, 1, 0);
if (ans == BASEN_ERRNO)
System.out.println(n + " is not a valid base-" + b + " number");
else
System.out.println(n + " base-" + b + " = " + ans + " base-10");
}
public static int basen(int number, int base, int placevalue, int answer) {
if (number == 0) return answer;
digit = number % 10;
if (digit >= base) return BASEN_ERRNO;
answer = 1;// not sure what to put here
number = 0;
placevalue = 0;
return basen(number, base, placevalue, answer);
}
}
答案 0 :(得分:0)
您可以实施以下算法。假设您有String number
表示要转换为十进制形式的数字,int base
表示给定数字的基数。你可以实现函数 int convertToNumber(char c);
,它接受一个代表你的号码中一位数的字符,并将字符映射到这样的数字:
0 - > 0, 1 - > 1, ......, A-> 10, B - > 11, ......, F - > 15, ...
然后,您只需遍历给定的字符串,并将此函数输出与基数乘以迭代的幂。例如,转换编号A32(十六进制): A32 = convertToNumber(A)* b ^ 2 + convertToNumber(3)* b ^ 1 + convertToNumber(2)* b ^ 0 = 10 * 16 ^ 2 + 3 * 16 ^ 1 + 2 * 16 ^ 0 = 10 * 16 * 16 + 3 * 16 + 2 = 2610(十进制)。
public class BaseConvert {
public static int convertDigitToNumber(char c) throws Exception {
if(c >= '0' && c <= '9') return c - '0';
if(c >= 'A' && c <= 'Z') return c - 55;
if(c >= 'a' && c <= 'z') return c - 97;
throw new Exception("Invalid digit!");
}
public static int convertToBase(String number, int base) throws Exception {
int result = 0;
for(int i = 0; i < number.length(); i++){
result += convertDigitToNumber(number.charAt(i)) * (int)Math.pow(base, number.length() - i - 1);
}
return result;
}
public static void main(String[] args) {
try{
System.out.println(convertToBase("732", 8));
System.out.println(convertToBase("A32", 16));
System.out.println(convertToBase("1010", 2));
}catch (Exception e) {
System.out.print(e);
}
}
}
答案 1 :(得分:0)
您可以像这样查看k长度的基数n:
x(0)* n ^(k-1)+ x(1)* n ^(k-2)+ ... + x(k-1)* n ^ 1 + x(k)* n ^ 0 <登记/>
其中x(0),x(1),...,x(k)是从左边开始的位置k处的数字。
所以,如果你试图将101 base 2转换为10,你会做以下事情:
1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0 = 4 + 0 + 1 = 5 base 10
说你想从基数6转换数字352:
3 * 6 ^ 2 + 5 * 6 ^ 1 + 2 * 6 ^ 0 = 108 + 30 + 2 = 145 base 10
您正在寻找的代码是这样的:
int[] digits = {3, 5, 2};
int base = 6;
int answer = 0;
for(int i = digits.length - 1; i >= 0; i--)
{
answer += digits[i] * Math.pow(base,digits.length-i-1);
}
return answer;
将返回145.
希望即使我的实现是迭代的,你也应该能够将它应用到你的递归实现中。