使用递归方法Java将Decimal转换为Hex,而不使用Strings,java.utils和switch

时间:2017-01-24 12:08:19

标签: java recursion hex

附加条件:

1)不要使用数字中使用数字的字符串。

2)不要使用jdk utils和if / switch来映射A-F字母。

这是最后一项任务:

写一个递归函数,用于从N-ary中的十进制系统传输自然数。主程序中的值N从键盘输入(16> = N> = 2)。

import java.util.Scanner;

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.println("Insert number ");
    int number = s.nextInt();
    System.out.println("Insert Base");
    int n = s.nextInt();
    System.out.println(convertFromDecimalToBaseN(number, n, 1));


}

public static Integer convertFromDecimalToBaseN(int num, int n, int pow) { //pow always = 1;
        Integer r = num % n;

        if (num < n)
            return new Double((Math.pow(10, pow - 1)) * r.doubleValue()).intValue();

        return convertFromDecimalToBaseN(num / n, n, pow + 1) +
                new Double(Math.pow(10, pow - 1) * r.doubleValue()).intValue();
    }
}

2 个答案:

答案 0 :(得分:0)

使用表查找A-F字母,如此

private static char charMap[] = {'0', '1', '2', '3', '4', '5', '6',
                        '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    System.out.println("Insert number ");
    int number = s.nextInt();
    System.out.println("Insert Base");
    int n = s.nextInt();
    System.out.println(convertFromDecimalToBaseN(number, n, ""));
}

public static String convertFromDecimalToBaseN(int num, int n, String result) {
    int r = num % n;
    int rest = num / n;

    if (rest > 0) {
        return convertFromDecimalToBaseN(rest, n, charMap[r] + result);
    }

    return charMap[r] + result;
}

答案 1 :(得分:0)

这里是使用java中的递归方法将十进制转换为十六进制的代码。

import java.util.Scanner;

public class DecimalToHexaDemo
{
   char hexa[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
   int temp;
   String hexaDecimal = "";
   String hexadecimal(int num)  // using recursive method
   { 
      if(num != 0)
      {
         temp = num % 16;
         hexaDecimal = hexa[temp] + hexaDecimal;
         num = num / 16;
         hexadecimal(num);
      }
      return hexaDecimal;
   } 

   public static void main(String[] args)
   {
      DecimalToHexaDemo dth = new DecimalToHexaDemo();
      int decimalNumber;
      Scanner sc = new Scanner(System.in); 
      System.out.println("Please enter decimal number: ");
      decimalNumber = sc.nextInt();
      System.out.println("The hexadecimal value is : ");
      String str = dth.hexadecimal(decimalNumber); 
      System.out.print(str);
      sc.close();
   }
}