0

我有以下代码来反转整数中的数字:

public class integerReversal {
    public static int reverseNum(int number){
        int reversed = 0;
        int remainder;
        //{I:  ; B: number > 0}
        while (number > 0){
            remainder = number % 10;
            number = number / 10;
            reversed = reversed * 10 + remainder; 
        }
        //{I: ; !B: number == 0}
    return reversed;
    }
    public static void main (String [] args){ 
        System.out.println(reverseNum(1262015 ));
    }
}

我的教授要求我们编写这段代码,还说要编写循环不变量和循环条件。我理解这里的循环条件,我只是不确定我应该看什么不变量。我意识到在 while 循环的开始和结束时某些条件是正确的,对于每次迭代,我只是看不出它会是什么。提示将不胜感激。

4

2 回答 2

0

在您的情况下, reversed >=0 是您的循环不变式,因为无论您是否打破循环,它都将始终保持正确。

于 2015-01-27T03:54:25.167 回答
0

循环不变量是一个常量表达式,其中包含旨在更改每次迭代的值。

在您的情况下,每次迭代number是没有最右边数字的数字,并且reversed是您从先前迭代中的余数构建的数字。所以我相信答案是,在每次迭代中,以下表达式保持不变:

number * 10 + reverseNum(reversed)

换句话说,您可以随时通过反转您当前的解决方案并添加 10 * 当前数字来取回原始数字。

这种不变量在测试你的算法时非常有用——一些程序员会定期包含一个assert语句来测试这些类型的不变量。

可能有几个不变量 - 在您的情况下,有许多不等式仍然成立。

于 2015-01-27T05:02:54.080 回答