为什么错了

P1307 [NOIP2011 普及组] 数字反转

difficultlong @ 2024-08-31 12:32:25

#include<bits/stdc++.h>
using namespace std;
long long a;
long long c[20];
bool flag=true;
int main(){
    scanf("%lld",&a);
    if(a<0){
        flag=false;
    }
    if(a==0){
        printf("0");
        return 0;
    }
        long long n=abs(a);
        long long i=1;
        while(n>0){
            c[i]=n%10;
            n/=10;
            if(!c[i]){
                continue;
            }
            i++;
        }
        if(!flag){
            printf("-");
        }
        for(int j=1;j<=i-1;j++){
            printf("%lld",c[j]);
        }
    return 0;
}

这个明明样例也能通过,为啥出错了


by Yxy7952 @ 2024-08-31 12:34:20

@bianchengzai

像太复杂了,一个while循环就能解决,重新写一下吧


by Deric456 @ 2024-08-31 12:37:39

可以搞成string类型的,从后往前遍历,输出符号再把开头0去掉@bianchengzai


by Deric456 @ 2024-08-31 12:43:42

哦对0要特殊判断


by hjxxlsx @ 2024-08-31 12:53:43

有时样例测过是对的,不过自己也要测一下其他数据,我就是这样,明明样例对,但还是没有过,因此我长记性了,每次都要测好几个样例才敢提交,这是我的观点,如果有什么不对,请您私信我,因为我也是个小白,谢谢


by hjxxlsx @ 2024-08-31 12:54:30

@Deric456 是的,但还要加特殊判断


by difficultlong @ 2024-08-31 14:12:59

@yixingyou 可是我真的不知道错在哪里 究竟该怎么办


by Yxy7952 @ 2024-08-31 14:16:00

@bianchengzai

注意!我不是故意贴AC代码,而是这道题确实很简单,理解一下代码就行了:

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long a,sum=0,yu=0;
    cin>>a;
    while(a!=0){
        yu=a%10;
        sum=sum*10+yu;
        a=a/10;
    }
    cout<<sum;
    return 0;
}

|