繁体   English   中英

使用递归方法将十进制转换为十六进制 Java

[英]Convert Decimal to Hex using Recursive method Java

我需要制作一个将十进制转换为十六进制的递归方法。 我不能使用Integer.toHexString 编辑:我试过这段代码,但它不能正常工作

public static String Hexa(String s) {
    String result = "";
    int n = Integer.parseInt(s);
    int remainder = n % 16;

    if (n == 0) {
        return Integer.toString(0);
    } else {
        switch (remainder) {
            case 10:
                result = "A" + result;
                break;
            case 11:
                result = "B" + result;
                break;
            case 12:
                result = "C" + result;
                break;
            case 13:
                result = "D" + result;
                break;
            case 14:
                result = "E" + result;
                break;
            case 15:
                result = "F" + result;
                break;
            default: result = Integer.toString(n/16) + result; break;
        }
        System.out.println(result);
        return Hexa(Integer.toString(n/16)) + result;
    }
}

编辑:更改了default情况和if (n == 0)循环返回语句,现在它工作得很好。

新代码:

 public static String Hexa(String s) {
        String result = "";
        int n = Integer.parseInt(s);
        int remainder = n % 16;

        if (n == 0) {
            return "";
        } else {
            switch (remainder) {
                case 10:
                    result = "A";
                    break;
                case 11:
                    result = "B";
                    break;
                case 12:
                    result = "C";
                    break;
                case 13:
                    result = "D";
                    break;
                case 14:
                    result = "E";
                    break;
                case 15:
                    result = "F";
                    break;
                default:
                    result = remainder + result;
                    break;
            }
            return Hexa(Integer.toString(n / 16)) + result;
        }
    }

问题出在您的默认子句中:

default: result = Integer.toString(n/16) + result; break;

它应显示为:

default: result = Integer.toString(remainder) + result; break;

这将使您的程序返回“ 04D2”。

但是您还可以进行其他一些更正:

  1. 停止来回转换为String。 例如,同一行可以只是:

    default: result = remainder + result; break;

    另外,将参数时间更改为int 如果确实需要接收String ,则将其作为辅助函数并使主函数接收String

  2. 您不需要在default结束时break

  3. 您不需要开关。 'F' = 'A' + (15 - 10)吗? 您可以弄清楚如何制作将[10,15]范围内的任何数字转换为其对应字母的公式。

  4. 除了使用Integer.toString(0)还可以使用"0" ...,但这甚至不是必需的,您可以使用""来避免输出中的前导0 如果您担心要处理整数为"0"的特殊情况,请添加一个特殊子句。

以下代码可以帮助您解决问题:

public static String decimalToAnyBase(int num,int base) {       
    if(num<base) {
        return num+"";
    }
    String result=null;
    int rem=num%base;
    String str=decimalToAnyBase(num/base, base);
    result=str+((rem>=10)? (char)(rem-10+'A')+"":rem);
    return result;
}

好吧,对于您问题的第二部分,我相信您已经从蒙德金先生那里得到了答复。

同时,对于问题的第一部分,这是将十进制转换为十六进制的递归方法。

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)
   { 
      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();
   }
}

源和参考十进制到十六进制java程序

    import java.util.Scanner;

    public class Assign01_05 
    {
        static String res;
        public static void hex(int num) //125
        {
            if(num>=0 && num<10)
                System.out.print(num);
            else if(num>=10 && num<=15)
            {
                switch(num)
                {
                case 10:
                    System.out.print('A');
                    break;
                case 11:
                    System.out.print('B');
                    break;
                case 12:
                    System.out.print('C');
                    break;
                case 13:
                    System.out.print('D');
                    break;
                case 14:
                    System.out.print('E');
                    break;
                case 15:
                    System.out.println('F');
                    break;
                }
            }
            else
            {
                hex(num/16);
                hex(num%16);
            }
        }
        public static void main(String[] args) 
        {
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter the Demical number :");
            int num=sc.nextInt();
            hex(num);
        }
    }

import java.util.Scanner;

public class Assign01_05 
{
    static String res;
    public static void hex(int num) //125
    {
        if(num>=0 && num<10)
            System.out.print(num);
        else if(num>=10 && num<=15)
        {
            switch(num)
            {
            case 10:
                System.out.print('A');
                break;
            case 11:
                System.out.print('B');
                break;
            case 12:
                System.out.print('C');
                break;
            case 13:
                System.out.print('D');
                break;
            case 14:
                System.out.print('E');
                break;
            case 15:
                System.out.println('F');
                break;
            }
        }
        else
        {
            hex(num/16);
            hex(num%16);
        }
    }
    public static void main(String[] args) 
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the Demical number :");
        int num=sc.nextInt();
        hex(num);
    }
}
import java.util.Scanner;

public class Ques5 {
    
    public static void hex(int n) {
        
        if(n>9&&n<=15) {
            System.out.printf("%c",'A'+(n-10));
        }
        else if(n>=0&&n<=9){
            System.out.printf("%d",n);
        }
        else {
            hex(n/16);
            hex(n%16);
        }       
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter the decimal number : ");
        int i = sc.nextInt();
        System.out.println("The hexadecimal number is : ");
        hex(i);
        sc.close();
    }

}
const char hex_string[17] = "0123456789ABCDEF";
void dec_to_hex(long long x){
    if(x == 0) return;
    dec_to_hex(x/16);
    printf("%c",hex_string[x%16]);
}

Java 中相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM