错在一个地方 就是<要编程<=,如下面注释
否则你的a2 b2就没有'\0'结尾 这样就会错
#include
#include
int main()
{
int i,j,m,n,t;
char a1[100000],b1[100000],a2[100000],b2[100000];
while(scanf("%s%s",&a1,&b1)!=EOF)
{
if(a1[0]=='-')
{
a1[0]='0';
}
if(b1[0]=='-')
{
b1[0]='0';
}
m=strlen(a1);
n=strlen(b1);
t=0;
while(a1[t]=='0')
{
t++;
}
for(i=0;i<=m-t;i++) //这里要变成<= 因为最后的'\0'也要拷贝过去
{
a2[i]=a1[i+t];
}
t=0;
while(b1[t]=='0')
{
t++;
}
for(i=0;i<=n-t;i++) //这里要变成<= 因为最后的'\0'也要拷贝过去
{
b2[i]=b1[i+t];
}
m=strlen(a2)-1;
n=strlen(b2)-1;
if(strchr(a2,'.')!=NULL)
{
while(a2[m]=='0')
m--;
a2[m+1]='\0';
if(a2[m]=='.')
a2[m]='\0';
}
if(strchr(b2,'.')!=NULL)
{
while(b2[n]=='0')
n--;
b2[n+1]='\0';
if(b2[n]=='.')
b2[n]='\0';
}
if(a2[0]=='\0'&&b2[0]=='\0')
printf("YES\n");
else if((a1[0]=='-'&&b1[0]!='-')||(a1[0]!='-'&&b1[0]=='-'))
printf("NO\n");
else if(strcmp(a2,b2))
{
printf("NO\n");
}
else
printf("YES\n");
}
return 0;
}
LZ,我用vs2008编译没错啊!,你的j定义了没有使用,scanf的警告是告诉你使用的时候有不安全的因素,因为scanf的是以空格和回车来作为用户属输入的结束,下面是我运行时的提示:
1>------ 已启动生成: 项目: 草稿, 配置: Debug Win32 ------
1>正在编译...
1>hjy.cpp
1>g:\vs2008hjy\草稿\草稿\hjy.cpp(7) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> g:\visual studio 2008\vc\include\stdio.h(306) : 参见“scanf”的声明
1>g:\vs2008hjy\草稿\草稿\hjy.cpp(5) : warning C4101: “j”: 未引用的局部变量
1>正在链接...
1>正在嵌入清单...
1>生成日志保存在“file://g:\vs2008HJY\草稿\草稿\Debug\BuildLog.htm”
1>草稿- 0 个错误,个警告
========== 生成: 成功1 个,失败0 个,最新0 个,跳过0 个==========
你在本地编译通过没?
如果在本地编译过了,在OJ上提示编译错误的话,请确认你选择的编译语言是否正确!
帮你提交了一下,是WA啊,不是CE。你的程序是以“- -”来结束输入?题目没这样的意思吧……自己再好好想想。
现在没空,有空再帮你调调。