LDlornd @ 2017-10-29 20:49:45
0分代码
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=5000;
int a[MAXN],b[MAXN],ans[MAXN];
int main()
{
memset(ans,0,sizeof(ans));
int p1=0,p2=0;
char c;
bool flag=true;
while(scanf("%c",&c)!=EOF)
if(c=='\n') break;
else a[++p1]=c-'0';
while(scanf("%c",&c)!=EOF)
if(c=='\n') break;
else b[++p2]=c-'0';
for(int i=1;i<=p1/2;++i) swap(a[i],a[p1-i+1]);
for(int i=1;i<=p2/2;++i) swap(b[i],b[p2-i+1]);
if(p1<p2)
{
for(int i=1;i<=p2;++i)
swap(a[i],b[i]);
swap(p1,p2);
}
for(int i=1;i<=p1;++i)
{
for(int j=1;j<=p2;++j)
{
ans[i+j-1]+=a[i]*b[j];
ans[i+j]+=ans[i+j-1]/10;
ans[i+j-1]%=10;
}
}
for(int i=p1+p2;i>=1;--i)
if(ans[i]!=0||flag==false) {printf("%d",ans[i]);flag=false;}
if(flag) printf("0");
return 0;
}
————————分割线———————— AC代码
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=5000;
char s[MAXN];
int a[MAXN],b[MAXN],ans[MAXN];
int main()
{
memset(ans,0,sizeof(ans));
int p1,p2;
bool flag=true;
scanf("%s",s);
p1=strlen(s);
for(int i=p1;i>=1;--i) a[i]=s[p1-i]-'0';
scanf("%s",s);
p2=strlen(s);
for(int i=p2;i>=1;--i) b[i]=s[p2-i]-'0';
if(p1<p2)
{
for(int i=1;i<=p2;++i)
swap(a[i],b[i]);
swap(p1,p2);
}
for(int i=1;i<=p1;++i)
{
for(int j=1;j<=p2;++j)
{
ans[i+j-1]+=a[i]*b[j];
ans[i+j]+=ans[i+j-1]/10;
ans[i+j-1]%=10;
}
}
for(int i=p1+p2;i>=1;--i)
if(ans[i]!=0||flag==false) {printf("%d",ans[i]);flag=false;}
if(flag) printf("0");
return 0;
}
0分和AC只在读入的区别,有哪位大神可以告诉我这是为什么? 0分代码在本地运行结果和AC代码是一样的。。。。
无法理解。。。
by 青衫白叙 @ 2017-10-29 20:51:31
luogu 是 linux 的评测系统。。。换行符是 \r\n
by 青衫白叙 @ 2017-10-29 20:54:11
@computerlover 帮助中心
by Arcturus1350 @ 2017-10-29 20:54:51
@青衫白叙 那noip是啥评测系统
by 青衫白叙 @ 2017-10-29 20:56:20
@cn:苏卿念 linux
by Arcturus1350 @ 2017-10-29 20:59:18
@青衫白叙 那么,也就是说noip时判断换行要写if(a[i]=='\r\n')?
by 青衫白叙 @ 2017-10-29 21:00:29
@cn:苏卿念 你就别这么写、、、
by Arcturus1350 @ 2017-10-29 21:02:13
那咋写?直接用gets()?
by 1124828077ccj @ 2017-10-29 21:03:04
@cn:苏卿念 其实这样也不保险,最好还是scanf,如果硬要整行读入建议采用类似读入优化的getchar方法
by LDlornd @ 2017-10-29 21:03:49
@青衫白叙 那就算是换成了if(c=='\r\n') break;也只是A掉了一个点啊。。。
by Arcturus1350 @ 2017-10-29 21:06:08
@2016陈常杰 就是直接scanf(%s,&s)?之后判断长度的时候加个l=strtlen(s)?