【问题标题】:How to print an int with comma divisors using a recursive method (no strings)?如何使用递归方法(无字符串)打印带有逗号除数的 int?
【发布时间】:2016-09-30 23:54:21
【问题描述】:

在我的计算机科学课上,我们被分配了一个递归实验室,我们必须在其中打印出一个用逗号分隔 3 位数字组的数字。 这是直接来自赋值的文本(方法必须是递归的):

编写一个名为 printWithCommas 的方法,它接受一个非负数 原始 int 参数并用正确插入的逗号显示它。 不使用字符串。

例如 printWithCommas(12045670);显示 12,045,670

printWithCommas(1);显示 1

我真的很难过。到目前为止,这是我的代码:

    public static void printWithCommas(int num) {
    //Find length
    if (num < 0) return;
    int length = 1;
    if (num != 0) {
        length = (int)(Math.log10(num)+1);
    }
    //Print out leading digits
    int numOfDigits = 1;
    if (length % 3 == 0) {
        numOfDigits = 3;
    }
    else if ((length+1) % 3 == 0) {
        numOfDigits = 2;
    }
    System.out.print(num / power(10,length-numOfDigits));
    //Print out comma
    if (length > 3) {
        System.out.print(',');
    }
    printWithCommas(num % power(10,length-numOfDigits));
}

它发生了堆栈溢出(我可以稍后修复),但它无法打印出一些零,特别是那些应该在每个逗号之后的零。

我觉得我采取了一种完全错误的方法,但想不出一个好的方法。任何帮助将不胜感激。

提前致谢!

注意:power 是我创建的一个计算功率的函数。第一个参数是底数,第二个是指数。

【问题讨论】:

  • 你意识到Java中已经有一个计算幂的函数了吗?
  • @BenWainwright 我们必须自己实现。从技术上讲,我使用的日志违反了实验室的规则,所以我稍后也必须修复它。
  • 好吧,有一个更好的方法来做这件事,但我觉得如果我给你我刚刚写的解决方案,我基本上会为你做你的实验室。所以这里有一些提示:通过执行n / 10 从号码n 中删除一个数字。要检索该数字,请执行 n % 10
  • 尝试创建一个递归函数方法,简单地将数字一个一个地打印出来,也就是每次调用该方法都负责打印一个单独的数字。完成此操作后,请尽您所能将逗号放在正确的位置。请记住,如果您的函数签名中没有足够的信息,您可以创建一个“辅助函数”来执行递归并接受额外的参数;这是一种相当普遍的模式。
  • 为防止堆栈溢出,请将您的中断条件更改为if (num &lt;= 0)

标签: java recursion int comma


【解决方案1】:

这是我想出的代码,对于其他可能会卡在这个问题上的人:

public static void printWithCommas(int num) {
    if (num > 999) {
        printWithCommas(num/1000);
        System.out.print(',');
        if (num % 1000 < 100) System.out.print('0');
        if (num % 1000 < 10) System.out.print('0');
        System.out.print(num%1000);
    }
    else {
        System.out.print(num);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2021-11-10
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多