到底是哪里有问题啊!!求求求dalao指点

P1307 [NOIP2011 普及组] 数字反转

heathera @ 2024-09-14 00:37:23

下面这段代码我自己随便怎么测试都能过,但是就是过不了测试点(只能拿40,第3 9 10 11个对了)

#include<string.h>
#include<stdio.h>
int main()
{
    int n,b=11;
    char arr[12];
    scanf("%d",&n);
    if(n==0)//特判
    {
        printf("0");
        return 0;
    }
    sprintf(arr,"%d",n);//数字转字符串
    if(arr[0]=='-') printf("-");//先加负号
    for(;b>=0;b--)//去0
    {
        if(arr[b]!='0'&&arr[b]!=0)
            break;
    }
    for(;b>=0;b--)//倒置输出
    {
        if(arr[b]=='-')//防止最后输出arr[0]多一个负号
            break;
    printf("%c",arr[b]);
    }
    return 0;
}  

先谢谢各位的解答啦!


by CHEN08_94 @ 2024-09-14 06:22:03

@heathera

首先,您的这份代码测试样例2就过不了

然后是第15行,一开始您不应该给b赋值为11,因为数组没有定义在全局变量里,有可能是随机数,所以应该从arr数组本身的长度开始遍历,代码如下

#include<string.h>
#include<stdio.h>
int main()
{
    int n,b;
    char arr[12];
    scanf("%d",&n);
    if(n==0)//特判
    {
        printf("0");
        return 0;
    }
    sprintf(arr,"%d",n);//数字转字符串
    if(arr[0]=='-') printf("-");//先加负号
    for(b=strlen(arr)-1;b>=0;b--)//去0
    {
        if(arr[b]!='0'&&arr[b]!=0)
            break;
    }
    for(;b>=0;b--)//倒置输出
    {
        if(arr[b]=='-')//防止最后输出arr[0]多一个负号
            break;
    printf("%c",arr[b]);
    }
    return 0;
}  

by heathera @ 2024-09-14 08:18:30

@CHEN08_94 好的,感谢感谢


|