Java 这个回文函数是如何工作的?
我得到了下面的代码片段来帮助我解决一个涉及数字回文的问题。我不知道这到底是怎么回事。我知道它涉及while循环,但无法遵循逻辑Java 这个回文函数是如何工作的?,java,Java,我得到了下面的代码片段来帮助我解决一个涉及数字回文的问题。我不知道这到底是怎么回事。我知道它涉及while循环,但无法遵循逻辑 public static boolean isPalindrome(int nr) { int rev = 0; int x = nr; while (x > 0) { rev = 10 * rev + x % 10; x /
public static boolean isPalindrome(int nr) {
int rev = 0;
int x = nr;
while (x > 0) {
rev = 10 * rev + x % 10;
x /= 10;
}
return rev == nr;
}
有人能解释一下这是怎么回事吗?如果数字是回文,那么循环结束后,
rev
将等于这个数字。下面是它的工作原理,其中,nr
是121:
public static boolean isPalindrome(int nr) {
int rev = 0;
int x = nr; // 121
while (x > 0) {
rev = 10 * rev + x % 10; // x % 10 is the last digit of x when in base 10. multiplying the previous value of rev by 10 and adding x % 10 is adding the last digit of x to the next digit of rev
// step 1: rev = 10*0 + 1 = 1
// step 2: rev = 10*1 + 2 = 12
// step 3: rev = 10*12 + 1 = 121
x /= 10; // truncates the last digit of x
}
因此返回语句应该是
returnrev==nr代码>当输入参数nr(后面的x,x>0)产生两个结果时,代码的原始片段:
public static boolean isPalindrome(int nr) {
int rev = 0;
int x = nr;
while (x > 0) {
rev = 10 * rev + x % 10; // impl., for examp. 13 / 10 = 1
x /= 10; // f truncation of x
}
回文是一个数字,无论你是从左到右还是从右到左读,它的读数都是相同的。
例如-1221
现在执行死刑
假设您已输入1221作为数字。
您的调用方法语句如下所示
伊斯帕林德罗姆(1221)
步骤1-这里我们有三个变量nr=1221、rev=0和x,它们将保存原始值1221
while循环一开始,它就检查x是否大于零,在我们的例子中,1221大于0,这是真的,因此程序将进入循环
那么rev=10*rev+x%10
此表达式将更改rev的初始值,该值为零
10*0+1221%10将给出1作为答案。由于%模运算符给出余数,因此1221除以10将得到1作为余数
现在rev的值为1
程序将转到下一个语句来更新x的值,因为我们已经存储了回文条目的一位数字
x / = 10 ;
这是一个速记语句,相当于
x=x/10;
这里,当x除以10,我们将得到122作为商,122将存储在x中
步骤2-现在程序流程将再次转到第一条语句(这就是循环的美妙之处),以检查当x=122大于0时增益为真的条件。
现在rev的值是
rev = 10 * 1 ( remember value of rev is 1 at the moment) + 122% 10 ;
rev的新值将为
rev=10*1+2(因为122除以10的模数或余数为2)
根据第一条语句,最终值为
rev=12
程序将提前更改x的值,因为我们已经完成了输入数字的最后两位
x = x / 10; which will result us the quotient of 12.
步骤3-12大于0条件真程序将移动到下一语句
rev = 10 * rev (12) + x (12) % 10;
新转速值
rev=120+2;
rev=122
下一个语句将给我们另一个改变后的x值,以便我们可以完成回文数字
x = x / 10;
x = 12/10; will give us 1 as quotient
步骤4-当条件1大于0时,将再次满足
更新后的rev值为
rev = 10* rev (122) + 1% 10;
因为10加1等于1,所以最后的表达式是
rev=1221
最后一个变化是x的值
x=x(1)\10;
x将为零,因为当1除以10时将没有商
步骤5-0大于0条件将为false,程序将退出while,所有变量的最终值将为
nr = 1221
rev = 1221
x = 0
方法中很少有语句会证明返回类型为布尔值
if(nr==rev)
return true ;
else
return false;
我希望我可以向您解释流程,也希望您对非回文数字运行相同的程序。在纸上写下一个小数字…添加一个示例迭代将使您的答案方式更好,用nr=22
说,并在迭代中一步一步地解释。感谢您的提示--添加。现在我知道发生了什么了,谢谢x/=10
可以在不引发错误的情况下对int进行处理——它只会截断以10为基数的x的最后一位。基本上它是x/10agree的楼层函数,这里是@Santiago Benoit,那里是purposly int。不会抛出任何错误。x将simpmy返回除法后的int值,这将是您的qoutient。
x = x / 10;
x = 12/10; will give us 1 as quotient