Hzu挑战自我


私信TA

用户名:gxhzxyjsj

访问量:98798

签 名:

2024终究会过去,期待2025!

等  级
排  名 8
经  验 27863
参赛次数 67
文章发表 157
年  龄 0
在职情况 教师
学  校 贺州学院
专  业 软件工程

  自我简介:

弱鸡一个,继续努力!

解题思路:

    用了两种代码:

    代码1:用的是以前高斯日记写的代码的思路。一个月一个月加上去,有点慢。

    代码2:一年一年地加上去,直到日期不超过365,才判断是该年的哪一月哪一日。


参考代码:

代码1:用的是以前高斯日记写的代码。一个月一个月加上去,有点慢。
#include <stdio.h>
int leap(int year)
{
	if(year%4==0 && year%100!=0 || year%400==0)  
		return 1;
	else
		return 0;
}
int main()
{
    int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int y,m,d,days;
    while(scanf("%d%d%d",&y,&m,&d)!=EOF)
	{	 
	    days=10000+d;
	    if(leap(y))  month[2]=29; 
	    else    month[2]=28;
	    while(days>month[m])
	    {
	        days=days-month[m];        
	        m++;
	        if(m>12)
	        {
	            m=m-12;
	            y++;
	            if(leap(y))  month[2]=29; 
	    		else   month[2]=28;
	        }
	    }
	    d=days;
	    printf("%d-%d-%d\n",y,m,d);
	}
	return 0;
}
代码2:重新写的一份代码,一年一年地加上去,直到日期不超过365,才判断是该年的哪一月哪一日。
#include<iostream> 
using namespace std; 
int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool leap(int year)
{
	if(year%4==0 && year%100!=0 || year%400==0)
		return true;
	else
		return false;
}
int main() 
{ 
	int yy,mm,dd; //出生日期
	int y,m,d;    //10000天后的日期
	while(cin>>yy>>mm>>dd)
	{	
		int sum=10000;
		for(int i=1;i<mm;i++)
			sum=sum+month[i];
		if(mm>2 && leap(yy))
			sum++;
		sum=sum+dd; 	
		for(y=yy;sum>=365;y++) 
		{
			if(leap(y)) 
				sum=sum-366;
			else
				sum=sum-365;			
		}
		for(m=1;m<=12;m++)
		{
			if(sum>month[m])
			{ 
				sum=sum-month[m];
				if(m==2 && leap(y))
					sum--; 
			}
			else
			{	
				d=sum;
				break;
			}			
		}
		cout<<y<<"-"<<m<<"-"<<d<<endl;
	}
	return 0;
}


 

0.0分

1 人评分

  评论区

  • «
  • »