java - 在java中转换为基数10?

标签 java recursion

我有一个家庭作业,我必须将任何基数转换为基数 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);
}
}

最佳答案

您可以这样查看以 n 为基数的 k 长度数:
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 以 2 为基数转换为以 10 为基数,您需要执行以下操作:
1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 4 + 0 + 1 = 5 基数 10

假设您想将数字 352 从 6 进制转换:
3 * 6^2 + 5 * 6^1 + 2 * 6^0 = 108 + 30 + 2 = 145 基数 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。

希望即使我的实现是迭代的,您也应该能够将其应用到您的递归实现中。

关于java - 在java中转换为基数10?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42353426/

相关文章:

java - 使用更少的内存填充 PDF 表单,展平,使用 iText

java - 如何从 AutoCAD 创建的 DXF 中提取组件?

C++ 使用递归函数创建链表

c - 递归函数调用中的段错误(核心转储)

java - 在不更改代码的情况下,如何通过环境变量或 JVM 参数强制 httpClient 使用代理

java - 如何在 Java 中将 ArrayList 更改为二维数组

java - 缓存一个 Map 变量并跨四个 tomcat 服务器访问它(java)

递归函数的Java stackoverflow错误

php - 用动态规划解决多项选择背包 (MCKP)?

javascript - 返回 'undefined' 值的简单函数