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 好的,感谢感谢