能否解释下下面代码的思路,非常感谢!

题目:x为正整数,定义rev(x)是x在十进制下翻转得到的数(x无前导零),如rev(53)=35,rev(1200)=21。给定正整数n,求x+rev(x)=n的正整数解的个数。

img

for循环你应该能明白,你应该是while那个地方不明白吧,解析如下:

X =x;
y=0;
while(X)
{
    y = 10*y +X%10;
    X/=10;
}
以X=53为例:
X%10是获取X的个位数,比如53的个位数是3
X/=10是让X除以10,比如53/10后的数是5

y 初始值为0,第一次执行while时
y = 10*y +X%10 = 0 + 3=3;
X/=10 ;X = 5;
第二次执行while
y = 10*y +X%10 = 3*10 + 5 =35;
X/=10 ;X =0;
while结束,此时y=35,正好是X逆序后的数

y=10*y+X%10;
其中X%10就是求个位数;
X/=10就是除以10,
这样X不断变小,直到等于0,停止循环。

基本是穷举法。两数相加等于n,肯定每个数不大于n,所以循环穷举。将循环数倒过来,再相加,判断是否和n相等
while循环实现将整数倒置,循环每次取出整数的个位数,然后不断乘以10完成倒置。比如321个位数为1,第一次循环为1,第二次1 * 10就是10,第三次10 * 10就是100,这样百位就是1了。