大佬们,萌新求助,测试点1和3过不去

P1307 [NOIP2011 普及组] 数字反转

TKYHX @ 2019-10-06 18:20:58

#include<stdio.h>
#include<string.h>
int main(){
    int i,n,t,j,m=0,g=0;
    char s[11],a[11];
    scanf("%s", s);
    n = strlen(s);
    if(s[0] != '-'){
    for(i = 0;i<n/2;i++){
            for(j = 1;;j++){
                if(s[n-i-j]!=0){
            t = s[n-i-j];
            s[n-i-j] = s[i];
            s[i] = t;
            break; 
            }
            }
        }
    }
    else{
    for(i = 0;i<(n/2);i++){
            for(j = 1;;j++){
                if(s[n-i-j]!=0){
            t = s[n-i-j];
            s[n-i-j] = s[i];
            s[i] = t;
            break; 
            }
            }
        }
    }
    if(s[n-1]!='-'){
    for(i=0;i<n;i++){
     if(s[i]!='0'){
      g = i;
     break; }
     }
     for(;g<n;g++){
        a[m] = s[g];
        m++;
     }
    }
    if(s[n-1] == '-'){
        a[0] = '-';
        m++;
        for(i = 0;i<n;i++){
            if(s[i]!='0'){
                g = i;
                break;
            }
        }
        for(;g<n;g++){
            if(s[g]=='-'){
                break;
            }
            else{
            a[m]=s[g];
            m++;
            }
        }
    }
    printf("%s", a);
    return 0;
}

by TianLuen @ 2019-10-06 18:29:52

@TKYHX 我来看看


by TianLuen @ 2019-10-06 18:32:54

您的前导0去除有误!


by TianLuen @ 2019-10-06 18:39:26

@TKYHX 我给个建议吧,其实,你可以就用

long long

类型。

如果是负数,先输出符号,再用强制类型转换为正数;

其次,利用一个循环完成倒序。

最后输出颠倒后的数据。


by TianLuen @ 2019-10-06 18:46:02

以下为我的代码,以供参考

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long c=0;//输入的数据
    unsigned long a=0;//绝对值后的数据
    bool _=0;//判断前导0
    cin>>c;
    a=abs(c);//我使用绝对值
    if(a!=0)//特判数据为0
    {
        if(c<0)cout<<"-";//符号
        while(a!=0)
        {
            if(a%10!=0)_=1;//从第1个非0的数字开始输出
            if(_)cout<<a%10;//输出
            a/=10;//不断减少
        }
        return 0;
    }
    cout<<0;//也是特判
    return 0;
}

by ldto @ 2019-10-11 13:12:38

很简单


by ldto @ 2019-10-11 13:12:47

var s:ansistring; bz:boolean; i:longint; begin readln(s); if s[1]='-' then write('-'); bz:=false; for i:=length(s) downto 1 do begin if s[i]<>'0' then bz:=true; if(bz)and(s[i]<>'-')then write(s[i]); end; end.


by ldto @ 2019-10-11 13:13:04

读一个字符串


by ldto @ 2019-10-11 13:14:01

前导零一判断完就输出就好了


by awa再也不水贴 @ 2019-11-10 11:19:43

@ldto 希望更丰富的展现?使用Markdown(滑稽)


by ldto @ 2019-11-14 12:29:05

@xiaojie233a 打的时候傻逼了......


|