您的位置:首页 > 其它

HDOJ 4515 小Q系列故事——世界上最遥远的距离

2013-03-24 09:37 405 查看
#include<stdlib.h>
#include<stdio.h>
int year,month,day;
int m[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
0,31,29,31,30,31,30,31,31,30,31,30,31};
int y[660]={0};
bool isrun(int year)
{
if((year%4==0&&year%100!=0)||year%400==0)
return 1;
return 0;
}
void fm(int len)
{
if(len<283){
int i=4;
if(len>7) len-=7;
else {
i=3;
len+=24;
}
while(len>m[0][i]){
len-=m[0][i];
i++;
}
year=2013;
month=i;
day=len;
}else{
int i=2013-1700;
len-=283;
i++;
i+=1700;
for(;isrun(i)?len>=366:len>=365;len-=365+isrun(i),i++);
year=i;
for(i=1;len&&len>=m[isrun(year)][i];len-=m[isrun(year)][i],i++);

day=len+1;
month=i;
}
printf("%d/%02d/%02d ",year,month,day);
}
void fw(int len)
{
if(len<83){
int i=3;
if(len>24){
len-=24;
i--;
while(len>m[0][i]){
len-=m[0][i];
i--;
}
day=m[0][i]-len;
}
else day=24-len;
year=2013;
month=i;
}else{
int i=2013-1700;
len-=82;
i--;
while(len>y[i]){
len-=y[i];
i--;
}
year=i+1700;
i=12;
while(len>m[isrun(year)][i]){
len-=m[isrun(year)][i];
i--;
}
day=m[isrun(year)][i]-len+1;
month=i;
}
printf("%d/%02d/%02d\n",year,month,day);
}
int main()
{
int i,N,len;
for(i=0;i<650;i++)
if(isrun(i+1700))
y[i]=366;
else
y[i]=365;

scanf("%d",&N);
while(N--)
{
scanf("%d",&len);
fm(len);
fw(len);
}
//system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: