1

假设方法 enigma 已定义如下:

public int enigma(int n)
{
    int m;

    while (n >= 10) {
        m = 0;
        while (n > 10) {
            m += n % 10;
            n /= 10;
        }
        n = m;
    }
    return (n);
}

enigma(1995) 的价值是多少?我知道 enigma(1995) 的值为 3。 一步一步是什么?

4

3 回答 3

3

好吧,您显然进展顺利,但我不想为您解决整个问题,所以我只是轻推一下:

当内部循环开始时,n = 1995m = 0。正如您在循环结束时已经发现的那样,n = 199, m = 5. 循环再次从顶部开始...... n = 199m = 5......等

于 2012-05-01T15:47:39.053 回答
0

外部 while 运行直到n小于 10。

内部循环运行直到n小于或等于 10,然后我们将值分配给mto n,因此可以再次评估外部循环。

内循环会发生什么? m增加n除以 10 的余数(所以 5 when n==1995),然后n设置为除法的(整数)结果(所以 now n==199)。这重复了几次:

n=1995 => m=5,n=f199
n=199  => m=5+9=14,n=19
n=19   => m=14+9=23,n=1

由于n现在不大于 10,内部循环结束并n设置为m(==23),然后我们再次执行此操作:

n=23 => m=3,n=2

由于n现在不大于 10,因此内部循环结束并n设置为m(==3)。由于 nown小于 10,因此存在外循环,我们得到了n(==3) 的结果。

于 2012-05-01T15:46:23.713 回答
0

只需使用 eclipse (java) 安装,创建一个静态 main 方法并调用您的函数。

当您使用调试器时,您可以一步一步地做任何事情并观察变量

于 2012-05-01T15:52:15.303 回答