【问题标题】:How to complete/fix additive persistence algorithm without converting to string?如何在不转换为字符串的情况下完成/修复附加持久性算法?
【发布时间】:2019-08-24 11:54:34
【问题描述】:

尝试编写附加持久性算法。 AP是当你有一个数字并且你不断添加它的数字直到你留下一个数字为止。例如。 9991 = 9+9+9+1 = 28,2+8=10,1+0=1。因此,9991 的加法持久性为 3。需要 3 次加法才能将数字减少到一位数。

我已经对问题进行了编码,但它不断增加计数器。对我来说看起来是正确的,但不能让它工作哈哈。

    Scanner reader = new Scanner(System.in);
    int ui;
    int b;
    int sum = 0;
    int count = 0;

    System.out.print("Enter a number: ");
    ui = reader.nextInt();

    do {
        do {
            b = ui % 10;
            ui = ui / 10;
            sum += b;

        } while (ui != 0);

        ui = sum;
        count++;

        //System.out.print(b);
        //System.out.print(sum);
        //System.out.print(ui);

    } while (ui > 10);

    System.out.print(count+1);
}

【问题讨论】:

  • 您是否通过 IDE 中的调试器运行程序?
  • 我真的不知道如何使用调试器。它显示我的 IP 有一些错误?但是感谢您让我注意到调试器。我现在学会使用它:)

标签: java string algorithm math while-loop


【解决方案1】:

您需要在每次运行时重置sum,否则您将为其分配ui,它会超过10,直到溢出。这是一个正确的版本:

do {
    sum = 0;
    do {
        b = ui % 10;
        ui = ui / 10;
        sum += b;

    } while (ui > 9);
    sum += ui;

    ui = sum;
    count++;

} while (ui > 9);

System.out.print(count);

【讨论】:

  • 我试了1654,结果是3,不是2。你能解释一下为什么吗?该程序似乎适用于我尝试过的各种其他数字。此外,它不适用于 1*10^n 和 9993。
  • 对,你需要打印count,而不是count + 1
  • 如果我这样做,那么 9992 不起作用。 9992 > 9+9+9+2 = 29 > 2+9=11 > 1+1=2。它需要 3 个步骤,但程序输出 2 个。
  • 哎呀,我们又忘记了一件事:sum += ui 在内循环之后,你现在可以试试吗?
猜你喜欢
  • 2017-06-21
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-29
相关资源
最近更新 更多