![](/img/trans.png)
[英]Convert Decimal to Hex using Recursive method Java, without using Strings, java.utils and switch
[英]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”。
但是您还可以进行其他一些更正:
停止来回转换为String。 例如,同一行可以只是:
default: result = remainder + result; break;
另外,将参数时间更改为int
。 如果确实需要接收String
,则将其作为辅助函数并使主函数接收String
。
您不需要在default
结束时break
您不需要开关。 'F' = 'A' + (15 - 10)
吗? 您可以弄清楚如何制作将[10,15]范围内的任何数字转换为其对应字母的公式。
除了使用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.