更新:有亿点脑残,可以用printf("%04d-%02d-%02d\n",m,i,d);
代替那一大段对输出的处理……
AC代码
// 以及需要的头文件
int main()
{
int m,n;
while(cin>>m>>n){
int leap=isLeap(m);
int i,d=0;
for(i=1;;i++) {
n=n-month[i][leap];
if(n<=0) {
d=n+month[i][leap];
break;
}
}
if(m>=1000) {
cout<<m<<"-";
} else if(m>=100) {
cout<<"0"<<m<<"-";
} else if(m>=10) {
cout<<"00"<<m<<"-";
} else {
cout<<"000"<<m<<"-";
}
if(i<10) {
if(d<10) printf("0%d-0%d\n",i,d);
else printf("0%d-%d\n",i,d);
}else{
if(d<10) printf("%d-0%d\n",i,d);
else printf("%d-%d\n",i,d);
}
}
}
测试数据
总测试数据如下:
2013 60
2011 350
2012 300
2000 211
2000 60
1 364
23 192
234 340
1234 1
思路:
包含:
-
平年测试
2013 60 2011 350
ans:
2013-03-01 2011-12-16
-
闰年测试(两种闰年以及对2月底的测试)
2012 300 2000 211 2000 60
ans:
2012-10-26 2000-07-29 2000-02-29
-
年、月、日输出是否满足yyyy-mm-nn的测试(用
printf("%04d-%02d-%02d\n",m,i,d);
代替了那一大段自己手写的输入输出控制之后就没必要测这个了1 364 23 192 234 340 1234 1
ans:
1 364 23 192 234 340 1234 1
一段用来查错的循环
for(;;) {
int m=rand()%3000+1,n=rand()%366+1;
int leap=isLeap(m);
int i,d=0,nt=n;
for(i=1;;i++) {
n=n-month[i][leap];
if(n<=0) {
d=n+month[i][leap];
break;
}
}
/***
此处的if语句中写出自己要判断的错误
e.g.
if(d<1||d>month[i][leap]){
cout<<"年份:"<<m<<", 天数:"<<nt<<endl;
cout<<"d="<<d<<endl<<"________________________________________"<<endl<<endl;
system("pause");
}
***/
if(m>=1000) {
cout<<m<<"-";
} else if(m>=100) {
cout<<"0"<<m<<"-";
} else if(m>=10) {
cout<<"00"<<m<<"-";
}
if(i<10) {
if(d<10) printf("0%d-0%d\n",i,d);
else printf("0%d-%d\n",i,d);
}else{
if(d<10) printf("%d-0%d\n",i,d);
else printf("%d-%d\n",i,d);
}
cout<<endl;
}