将一个十进制数转换为三进制数

9
如何使用方法 int converter(int num) 将十进制数转换为三进制数。
import java.util.Scanner;

public class BaseConverter {
    int answer;
    int cvt = 0;
    while (num >= 0) {
        int i = num / 3;
        int j = num % 3;
        String strj = Integer.toString(j);
        String strcvt = Integer.toString(cvt);
        strcvt = strj + strcvt;
        num = i;
        break;
    }
    answer = Integer.parseInt("strcvt");
    return answer;
}

public static void main(String[] agrs) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter a number: ");
    int number = in.nextInt();
    System.out.print(converter(number));
    in.close();
}

编译完成了。但是当我尝试运行它并输入一个数字时,它显示: java.lang.NumberFormatException: For input string: "strcvt" 我不知道该如何修复它。如何在不使用字符串的情况下解决这个问题?


1
你是否意图在 parseInt 方法中使用变量 strcvt?你的代码目前传递了字面字符串 "strcvt"。 - shree.pat18
1
你对这行代码有什么期望? Integer.parseInt("strcvt"); - Evan Knowles
4个回答

7

您根本不需要使用String。

试试这个方法代替:

public static long asBase3(int num) {
    long ret = 0, factor = 1;
    while (num > 0) {
        ret += num % 3 * factor;
        num /= 3;
        factor *= 10;
    }
    return ret;
}

注意:计算机中的数字始终只有N位,即32位或64位,也就是说它们是二进制的。然而,您可以创建一个数字,在以10为底打印时,实际上会显示基于3的数字。


1
@PeterLawrey,asBase3(3); 输出的是 "1" 而不是 "10"。 - Sedat Polat
1
@PeterLawrey,我认为您是指“factor *= 10;”而不是“factor += 10;” :) - Sedat Polat
1
这很奇怪,因为它不返回一个三进制数,它返回一个只看起来像三进制的十进制数。如果你想在三进制中表示它,你真的应该使用一个字符串。 - Octopus
@Octopus 在编程中,经常会混淆某些数据的值和它们的打印方式,并没有意识到它们之间的区别是不同的。 - Peter Lawrey
可以安全地使用范围为0≤num≤2 ** 30。Long类型有64位。 - Jaryn

5

这个答案对我帮助很大;我需要将一个十进制(基数为10)的数字转换成三进制(基数为3),在在网上搜索了一些实现方法后,我即将使用其中之一。然而,使用Integer.toString(int i, int radix)是更简单的方法。 - Tech Expert Wizard

3

您没有使用已声明的变量String strcvt,而是由于打字错误而使用了"strcvt"

更正为

answer = Integer.parseInt("strcvt");

to

answer = Integer.parseInt(strcvt);

2

你需要解析 strcvt 的值,而不是字符串 "strcvt"。

因此,你需要去掉双引号 answer = Integer.parseInt(strcvt); 并在循环外定义变量 strcvt。 将你的代码更改为:

public static int converter(int num) {
    int answer;
    int cvt = 0;
    String strcvt = null ;
    while (num >= 0) {
        int i = num / 3;
        int j = num % 3;
        String strj = Integer.toString(j);
        strcvt = Integer.toString(cvt);
        strcvt = strj + strcvt;
        num = i;
        break;
    }
    answer = Integer.parseInt(strcvt);
    return answer;
}

谢谢!它起作用了!但是我得检查一下我的逻辑,因为我得到的答案是错误的。 - AliceBobCatherineDough

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接