手动输入是对的,但测试点一个都过不了(C)

P1307 [NOIP2011 普及组] 数字反转

23012859ex @ 2023-12-28 21:50:33

#include<stdio.h>
int main()
{
    long int N;
    scanf("%ld",&N);
    if(N==0)
    {
        printf("%ld",N);
        return 0;
    }

    //先判断这个数有几位
    int count;
    long int number=N;
    for(int i=0;number!=0;i++)
    {
        number=number/10;
        count++;
    }

    //先对0进行判断
    while(N%10==0)
    {
        count--;
        N=N/10;
    }

    //负数情况
    int flag=0;
    if(N<0)
    {
        flag=1;
        N=0-N;
    }

    //进行反转
    for(int i=1;i<=count/2;i++){
        int n=1,m=1;
        for(int j=0;j<i;j++)
        n*=10;
        for(int j=0;j<(count-i);j++)
        m*=10;
        N=N+(N%n/(n/10))*m-N%n/(n/10)*(n/10)+(N/m%10)*(n/10)-N/m%10*m;
   }

    //负数情况
    if(flag==1) N=0-N;

    printf("%d",N);
    return 0;
}

by Sci_8633 @ 2023-12-30 20:18:59

@23012859ex

#include<bits/stdc++.h>
using namespace std;
string n;
bool flag;
int main(){
    cin>>n;
    int len=n.size();
    for(int i=0;i<len;++i){
        if(n[i]=='0')
            flag=1;
        if(flag==1)
            printf("%c",'0');
            break;
    }
    if(n[0]!='-'){
        reverse(n.begin(),n.end());
        int i=0;
        while(n[i]=='0'){
            i++;
        }
        n.erase(0,i);
        cout<<n;
    }
    else{
        n.erase(0,1);
        len--;
        reverse(n.begin(),n.end());
        cout<<'-';
        int i=0;
        while(n[i]==0){
            i++;
        }
        n.erase(0,i);
        cout<<n;
    }
    return 0;
}

直接粗暴的上reverse翻转函数,再(拼命)加一些调整即可。 100分通过AC,给你参考一下。


by restaier @ 2024-01-07 19:28:18

@Sci_8633 我几行代码解决了,答案自己运行都对,测试一个过不了


by Sci_8633 @ 2024-01-13 15:51:42

@restaier 你又是谁?


by restaier @ 2024-01-14 10:55:59

@Sci_8633 为什么我这题得分100,答案不接受,就几行


by Sci_8633 @ 2024-02-01 21:22:25

@restaier 第一:我的意思是说”23012859ex“发的帖,为什么@我的人是你?
第二:你的代码呢?


|