• C++
  • 信奥【0420】上午班-日期问题研究

  • @ 2024-4-20 10:31:58
 要研究的问题是:两个日期(y1-m1-d1和y2-m2-d2)之间的差值
> 1、总分解问题:
> 1)、求y1-m1-d1和y1-1-1的差值sum1
> 2)、求y2-m2-d2和y1-1-1的差值sum2
> 3)、sum2-sum1就是我们要求的结果
> 2、求差值分解
> 1)、完整年份的天数(区分闰年和平年)
> 2)、完整月份的天数(区分大月、小月、闰年2月、非闰年2月)
> 3)、零散天数
> 3、闰年的判断:
> 1)、普通闰年:year%4==0&&year%100!=0
> 2)、世纪闰年:year%400==0
> 4、判断日期是周几
> 1)、确认锚点(知道某一天y-m-d是周几)
> 2)、计算要判断日期和锚点差值天数
> 3)、差值除以7的余数进行分支判断进行推导(周期性)

image image

image image image image image

#include<bits/stdc++.h>
using namespace std;

int main(){
	int y1,m1,d1,y2,m2,d2;
	char ch;
	cin>>y1>>ch>>m1>>ch>>d1;
	cin>>y2>>ch>>m2>>ch>>d2;
	int sum1=0,sum2=0;
	// 完整月份
	for(int i=1;i<m1;i++){
		if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
		{
			sum1+=31;
		}else if(i==2)
		{
			if(y1%4==0&&y1%100!=0||y1%400==0)
			{
				sum1+=29;
			}else{
				sum1+=28;
			}
		}else{
			sum1+=30;
		}
	}
	sum1+=d1;
	// 完整的年份
	for(int i=y1;i<y2;i++){
		if(i%4==0&&i%100!=0||i%400==0)sum2+=366;
		else sum2+=365;
	}
	// 完整月份
	for(int i=1;i<m2;i++){
		if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
		{
			sum2+=31;
		}else if(i==2)
		{
			if(y2%4==0&&y2%100!=0||y2%400==0)
			{
				sum2+=29;
			}else{
				sum2+=28;
			}
		}else{
			sum2+=30;
		}
	}
	sum2+=d2;
	cout<<sum2-sum1;
	return 0;
}

作业: 1、生日是周几 image

2、最老入职员工的天数 image image

3、智能日历 image image

6 条评论

  • @ 2024-4-27 9:38:15

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    image

    • @ 2024-4-27 9:30:12
      #include<bits/stdc++.h>
      #include<ctime>
      using namespace std;
      const int N = 1e6+10;
      
      int main(){
      	time_t now;
      	tm *p;
      	time(&now);
      	p = localtime(&now);
      	int y_1,m_1,d_1;
      	y_1 = p->tm_year+1900;
      	m_1 = p->tm_mon +1;
      	d_1 = p->tm_mday;
      	printf("今天是%d年%d月%d日\n",y_1,m_1,d_1);
      	switch (p->tm_wday) {
      	case 1:cout<<"周一"<<endl;break;
      	case 2:cout<<"周二"<<endl;break;
      	case 3:cout<<"周三"<<endl;break;
      	case 4:cout<<"周四"<<endl;break;
      	case 5:cout<<"周五"<<endl;break;
      	case 6:cout<<"周六"<<endl;break;
      	default:cout<<"周日"<<endl;break;
      	}
      	int c;
      	while(1){
      		printf("***********************************************************\n\n");
      		printf("请选择:\n");
      		printf("1、倒计时系统\n");
      		printf("2、日期查询系统\n");
      		printf("***********************************************************\n");
      		cin>>c;
      		if(c==1){
      			printf("请输入倒计时截止日期(格式为:年-月-日):\n");
      			
      		}else if(c==2){
      			
      		}
      	}
      	return 0;
      	
      	
      }
      
      • @ 2024-4-23 22:10:07

        • @ 2024-4-21 12:17:58

          #include<bits/stdc++.h> using namespace std; int main(){ int n,y=1; for(int i=1;i<10;i++;){ n=(y+1)*2; n=y; } cout<<y<<endl; system("pause"); return 0; }

          • @ 2024-4-20 10:53:52

            image

            • @ 2024-4-20 10:38:17

              image

              image

              image

              • 1