更改伪代码,以便我们摆脱循环

Change a pseudo-code such that we get rid of a loop

我有以下伪代码:

read n
p <- 1;
m <- 0;
k <- 0;
while ( n != 0 )
    read x
    for ( i <- 1, k )
        x <- [x / 10]

    if ( x != 0 )
        c <- x % 10
    else
        c <- n % 10

    m <- c * p + m
    n <- [n / 10]
    p <- p * 10
    k <- k + 1
write m

而且我必须转换此代码,以便我们只有 1 个循环。我一遍又一遍地检查例子,但我不知道我应该做什么。我认为我们需要第一个 while 循环,所以我一直试图摆脱那个 for 循环函数,但我不明白如何只用一个循环就可以得到相同的行为。

(请原谅伪代码的糟糕风格)

如果你说的是

for ( i <- 1, k )
    x <- [x / 10]

循环,它将 x 除以 10 ** k,然后

x <- [x / 10**k]

完全完成了循环的功能。如果你觉得提升到幂是变相的循环,请考虑

power_of_ten = 1
while ( n != 0 )
    read x
    x <- [x / power_of_ten]
    ....
    power_of_ten <- power_of_ten * 10