70分求纠错

P1307 [NOIP2011 普及组] 数字反转

Pony @ 2016-11-26 18:37:49

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
    int y;
    char a[1000];
    gets(a);
    y=strlen(a);
    if(a[0]=='-')
    {
        cout<<a[0];
            for(int i=y-1;i>=1;i--)
           {
               if(a[i]=='0')
               continue;
            cout<<a[i];
          }
    }
    else{
            for(int i=y-1;i>=0;i--)
    {
        if(a[i]=='0')
         continue;
        cout<<a[i];
    }  
    }
    return 0;
}

by PTC06 @ 2016-11-26 20:34:29

你这样去除0是错的。题目要求的是使最后得数的最高位上不是0,而你把全部0都删了。


by PTC06 @ 2016-11-26 20:35:00

@lg5232


by JK_spc @ 2016-11-26 21:57:53

#include<cstdio>
#include<cstring>
char s[15];
int main(){
    gets(s);//读数
    int len=strlen(s);//求长度
    bool flag;//用来检验是否有‘-’号
    if(s[0]=='-'){
        flag=true;
        printf("-");//如果有‘-’号,就输出‘-’,把flag标记为真(表示有‘-’号)
    }
    while(s[len--]=='0'){}//从后往前看高位是否为0,是就把下表往前移一位,不是就跳出
    while(len>0) printf("%c",s[len--]);//从后往前输出去0后的答案
    if(!flag) printf("%c",s[0]);//如果有-号,就不管,没有-号,就把是s[0]输出
    return 0;    
}

by JK_spc @ 2016-11-26 22:00:18

刚才发错了 sorry

下面正解

====================
#include<cstdio>
#include<cstring>
char s[15];
int main(){
    gets(s);//读数
    int len=strlen(s)-1;//求长度
    bool flag;//用来检验是否有‘-’号
    if(s[0]=='-'){
        flag=true;
        printf("-");//如果有‘-’号,就输出‘-’,把flag标记为真(表示有‘-’号)
    }
    while(s[len]=='0'){len--;}//从后往前看高位是否为0,是就把下表往前移一位,不是就跳出
    while(len>0) printf("%c",s[len--]);//从后往前输出去0后的答案
    if(!flag) printf("%c",s[0]);//如果有-号,就不管,没有-号,就把是s[0]输出
    return 0;    
}

by JK_spc @ 2016-11-26 22:06:13

附一个stack的做法,及供参考

=======================
#include<iostream>
#include<cstdio>
#include<stack>
using namespace std;
stack<char>mystack;
int main(){
    char s; bool flag;
    while(cin>>s){
        if(s=='-'){
            flag=1;
            continue;
        }
        mystack.push(s);
    }
    if(flag) printf("-");
    while(!mystack.empty()&&mystack.top()=='0') mystack.pop();
    while(!mystack.empty()){
        printf("%c",mystack.top());
        mystack.pop();
    }
    return 0;
}

by ezoi_px @ 2016-12-02 13:10:23

最简单的做法:

#include <iostream>
using namespace std;
int main()
{
    int n,m=0,x;
    cin>>n;
    x=n;
    if (n<0) n=-n;
    while (n!=0)
    {
        m=m*10+n%10;
        n/=10;
    }
    if (x<0) cout<<-m;
    else cout<<m;
}

|