9,10测试点过不了求调

P1307 [NOIP2011 普及组] 数字反转

EgoStrip @ 2024-01-10 13:41:35

我的思路是用字符串读入再倒序输出,正、负数和0进行判断,对于数字中间的0,将其转换为其他符号 , 输出时再化成0,不知道问题在哪,求debug。


**#include<iostream>
#include<string>
using namespace std;
int main(){
    string n;
    cin>>n;
    for(int i=0;i<n.size();i++){
        if(n[i]=='0'&&n[i-1]!='0'&&n[i+1]!='0'&&i!=n.size()-1){
            n[i]='&';//对于中间的0转化为&
        }
    }
    if(n[0]=='-'){//对于负数的输出
        cout<<'-';
        for(int i=n.size()-1;i>0;i--){
        if(n[i]=='0'){
            continue;
        }
        else if(n[i]=='&'){
            cout<<0;
        }
        else{
            cout<<n[i];
        }
    }
    }
    else if(n[0]=='0'){//对于0的输出
        cout<<'0'<<endl;
        return 0;
    }
    else{//对于正数的输出
    for(int i=n.size()-1;i>=0;i--){
        if(n[i]=='0'){
            continue;
        }
        else if(n[i]=='&'){
            cout<<'0';
        }
        else{
            cout<<n[i];
        }
    }
}
    return 0;
}**

by Dtw_ @ 2024-01-10 14:04:32

显然你 if(n[i]=='0'&&n[i-1]!='0'&&n[i+1]!='0'&&i!=n.size()-1) 是不行的,比如所 1002,你的输出是 21,但应该是 2001,而且输出的时候比如 21000 你应该定义一个变量如果他输出了非0的数字了,那你就可以输出0了,我把你的改了改

#include<iostream>
#include<string>
using namespace std;
int main(){
   string n;
   cin>>n;
   if(n[0]=='-'){//对于负数的输出
    cout<<'-';
    int res = 0;
    for(int i=n.size()-1;i>0;i--){
        if(n[i]=='0' && res){
            continue;
        }
        else{
            res++;
            cout<<n[i];
        }
    }
   }
   else if(n[0]=='0'){//对于0的输出
    cout<<'0'<<endl;
    return 0;
   }
   else{//对于正数的输出
   int res = 0;
   for(int i=n.size()-1;i>=0;i--){
    if(n[i]=='0'&&res){
        continue;
    }
    else{
        res++;
        cout<<n[i];
    }
   }
}
   return 0;
}

by Dtw_ @ 2024-01-10 14:06:38

@EgoStrip,代码贴错了,应该是这个

#include<iostream>
#include<string>
using namespace std;
int main(){
   string n;
   cin>>n;
   if(n[0]=='-'){//对于负数的输出
    cout<<'-';
    int res = 0;
    for(int i=n.size()-1;i>0;i--){
        if(n[i]=='0' && !res){
            continue;
        }
        else{
            res++;
            cout<<n[i];
        }
    }
   }
   else if(n[0]=='0'){//对于0的输出
    cout<<'0'<<endl;
    return 0;
   }
   else{//对于正数的输出
   int res = 0;
   for(int i=n.size()-1;i>=0;i--){
    if(n[i]=='0'&&!res){
        continue;
    }
    else{
        res++;
        cout<<n[i];
    }
   }
}
   return 0;
}

by Dtw_ @ 2024-01-10 14:07:01

@EgoStrip


by EgoStrip @ 2024-01-12 18:30:15

@WA_QJ 感谢感谢


|