求助!为啥输出啥也没有?

P1307 [NOIP2011 普及组] 数字反转

看你的else if,n=0是赋值,这边是判断,应该用n==0,然后while(1==1)可以写成while(1),只要里面的数字不是0都会一直循环,另外n=0-n可以直接写成n=-n
by ZXY赵显义 @ 2022-08-22 09:55:20


@[syzsQSMH](/user/741120) 我时间紧,目测的,可能会有错,但建议换的地方应该没错。
by ZXY赵显义 @ 2022-08-22 09:56:05


`else if()`括号里是`n==0`而不是`n=0` + `if(n==0)`用于判断,括号内返回`bool`值; + `if(n=0)`会把`0`__赋值给__`n`,然后只返回`1`!!!! ~~初学经常犯的错误~~
by yuanjing @ 2022-08-22 10:05:49


请问这里是什么回事? ```cpp else if(n = 0){// <-这儿 cout << 0; return 0; } ``` n=0 这条语句,会返回 n 所赋的值(也就是**0**) 但这条语句返回了0,因此else if中的条件不成立,于是到了while循环这里。 ```cpp while(1==1){ if(n <= 0){ break; } cout << n%10; n /= 10; } ``` 因为条件 1==1 始终成立,所以是一个无限循环,直到 n<=0 为止。 **最致命的漏洞就在这里!** 当n==0时,while循环中的 n<=0 已经成立,所以将**得不到任何输出**! 问题来了: 那为什么输入时没有输入0,却**也没有输出呢**? 让我们再次将目光转到那个else if上。 可以看到,在进行else if判断时,n总是先赋值为0,再进行判断。 所以,n总是会在第11行被赋为0。 要解决问题,其实很简单: # code: ```cpp #include<bits/stdc++.h> using namespace std; int main(){ int n; cin >>n; if(n < 0){ n = 0-n; }else if(n == 0){ cout << 0; return 0; } while(1==1){ if(n <= 0){ break; } cout << n%10; n /= 10; } return 0; } ``` ~~完美!~~
by __YLX @ 2022-08-22 10:14:21


栓Q
by _O__o_ @ 2022-08-22 10:56:16


@[YangLX_2021](/user/664760) 负数调试错误
by Wangxiaolong666 @ 2022-10-14 19:36:02


|