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

P1307 [NOIP2011 普及组] 数字反转

_O__o_ @ 2022-08-22 09:46:20

#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 ZXY赵显义 @ 2022-08-22 09:55:20

看你的else if,n=0是赋值,这边是判断,应该用n==0,然后while(1==1)可以写成while(1),只要里面的数字不是0都会一直循环,另外n=0-n可以直接写成n=-n


by ZXY赵显义 @ 2022-08-22 09:56:05

@syzsQSMH 我时间紧,目测的,可能会有错,但建议换的地方应该没错。


by yuanjing @ 2022-08-22 10:05:49

else if()括号里是n==0而不是n=0

初学经常犯的错误


by __YLX @ 2022-08-22 10:14:21

请问这里是什么回事?

else if(n = 0){//  <-这儿
    cout << 0;
    return 0;
}

n=0 这条语句,会返回 n 所赋的值(也就是0

但这条语句返回了0,因此else if中的条件不成立,于是到了while循环这里。

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:

#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 _O__o_ @ 2022-08-22 10:56:16

栓Q


by Wangxiaolong666 @ 2022-10-14 19:36:02

@YangLX_2021 负数调试错误


|