大佬们能帮我看看这个代码有啥问题吗?

P1307 [NOIP2011 普及组] 数字反转

joecii @ 2023-03-02 00:29:56

#include<stdio.h>
#include<string.h>
int main()
{
    int i;
    char str[100];
    scanf("%s",str);
    if(str[0]!='-')
    {
        for(i=strlen(str)-1;i>=0;i--)
        {
            printf("%c",str[i]);
        }
    }
    else
    {
        printf("%c",str[0]);
        i=strlen(str)-1;
        while(str[i]=='0')
            {
                i--;
            }
        for(;i>0;i--)
        {
            printf("%c",str[i]);
        }
    }
    return 0;
}

by joecii @ 2023-03-02 00:31:34

好像有一个测试数据过不了


by Kevin_Mamba @ 2023-03-02 05:58:48

@joecii 非负数也要去掉前导零。

注意 0 要特判。

    if(str[0]!='-')
    {
        i=strlen(str)-1;
        while(str[i]=='0')
            {
                i--;
            }        
        for(;i>0;i--)
        {
            printf("%c",str[i]);
        }
        printf("%c",str[0]);
    }

by joecii @ 2023-03-02 08:09:15

@Kevin_Mamba 好的,谢谢.


by shapley @ 2023-03-14 14:45:28

正整数,结尾是0的没有去0。比如500。


by 11116a @ 2023-04-15 13:04:07

@joecii

#include<bits/stdc++.h>//头文件
using namespace std;//cin,cout必备的
long long s[11]={},n,k=0,a=1;//数组s,n和转换后的k,再加一个a,作用后面讲
int main()//主程序
{
    memset(s,0,sizeof(n));//清零
    cin>>n;//输入不解释
    for(int i=1;i<=10;i++) s[i]=n/a%10,a*=10;//求出位数后存入数组,具体的就不说了
    a=1000000000;//初始化
    for(int i=1;i<=10;i++) k+=s[i]*a,a/=10;//存入k
    while(k%10==0) k/=10;//倒着看,最后有0就除掉
    cout<<k;//输出不解释
    return 0;//好习惯棒棒哒[恶心][恶心][呕吐][呕吐]
}

by 11116a @ 2023-04-15 13:05:07

#include <bits/stdc++.h>
using namespace std;
int n=0,s=0;//定义与归0 
int main(){
    for(cin>>n;n!=0;n/=10)s=s*10+n%10;//同上一种的套路,暴力直接循环搞 
    cout<<numb;return 0;//输出,0会没掉的(自己去试) 
}

|