c语言。输出该整数对应的反向数。

从键盘上输入一整数(int范围内),输出该整数对应的反向数。

比如输入3486,则输 出6843。
请注意,输出的6843是一个数,不能只是将每个位上的数字打印出。

如果输入数字以0结 束,则反向数不需要输出前导0。
输入格式:"%d" 输出格式:"%d"
程序运行结果示例1:
输入:20220115
输出:51102202
程序运行结果示例2:
输入:150
输出:51

while(n)<-这里n是在干嘛?
{
s = s * 10 + n % 10; <-这里的算法又是在干嘛???
n/=10;
}

可以详细解答一下代码的意思吗?


#include
int main()
{
    int n;
    int s = 0;
    scanf("%d",&n);
    while(n)                          //(n)?
    {
        s = s * 10 + n % 10;          //为什么??这是在干嘛?
        n/=10;
    }
    printf("%d",s);
    return 0;
}

欢迎采纳,这段代码的功能是将给定的数字 n 翻转过来,比如 n 是 1234,那么最终的输出 s 就会是 4321。为什么要使用这行代码 s = s * 10 + n % 10 ?因为%运算得到的是余数,当n的值不断除以10,余数就是每一位上的数字,乘以10则可以实现数字翻转。
举个1234例子
如果给定的数字是1234,最初 s 等于 0( s=0),所以 n % 10 结果是 4,然后将 n%10 的结果加到 s 上,即 s = 0 + 4,此时 s 的值为4。接着,n 除以10,就变成了 123,此时,n % 10 结果是 3,将 n % 10 的结果再加到s上,即 s = 4 * 10 + 3,此时 s 的值为43。在继续循环直到 n 变为 0,即可得到最终的结果 s = 4321,也就是翻转后的结果。

①s = s * 10 + n % 10 的意思话,请看下面所给的例子

如数字n=123,循环第一次时,s=0*10+123%10=3,n=n/10=12;
                      循环第二次时,s=3*10+ 12%10=32,n=n/10=1;
                     循环第三次时,s=32*10+1%10=321,n=0
                     当n=0,while循环就会结束

②while(n)的意思是当n=0的时候,代表该数的反向数已经放在变量s中了,此时可以结束循环了
③如果当你不知道某句话是啥意思的时候,你可以在里面尝试打印其变量值,根据变量值的变化值去倒推就行了,如本题可以在while循环的n=n/10打印一下n的值和s的值

1.while(n) 等价于while(n!=0)
while里面本来需要一个bool,当里面放入的实际是个int时,非0会自动转换成true,0会转换成false
2.s = s * 10 + n % 10;这不就是把n的最低位取出来,然后加进s里面吗,n每次除以10,所以最低位一直在变化,一开始是个位,然后是十位
而s总是先自乘以10再加n,那么相当于把n的最低位放到s的最高位去,这不就倒过来了吗

这是提取数的不同位置上的数字的作用,while循环中提取然后进行计算和加和