给定一个日期计算 days天后的日期

//2019-10-31
//日期计算

#include <iostream>
using namespace std;
typedef struct date{
	int year;//年
	int month;//月
	int day;//日
}Date;
void main()
{

	int Check_y();//检查年是否合法
	int Check_m();//检查月是否合法
	int Check_d();//检查日是否合法
	Date Newtime(Date date,int days);//求新日期
	Date date1;//旧
	Date date2;//新
	int days;
	printf("请输入当前日期\n");
	scanf("%d %d %d",&date1.year,&date1.month,&date1.day);
	printf("请输入天数\n");
	scanf("%d",&days);
	date2=Newtime(date1,days);
	printf("%d %d %d\n",date2.year,date2.day,date2.day);
}
int Check_y(Date date){
	if(date.year<=1000||date.year>=9999)//不是四位整数
		return 0;
	else if(date.year%4==0&&date.year%100!=0||date.year%400==0)//是闰年
		return 2;
	else
		return 1;//是非闰年
}
int Check_m(Date date){
	if(date.month<1||date.month>12)
		return 0;
	else 
		return 1;
}
int Check_d(Date date){
	if(date.month==1||date.month==3||date.month==5||date.month==7||date.month==8||date.month==10||date.month==12){
		if(date.day>=1&&date.day<=31)
			return 1;
		else 
			return 0;
	}else if(date.month!=2){
		if(date.day>=1&&date.day<=30)
			return 1;
		else 
			return 0;
	}else{
		if(Check_y(date)==2){//是闰月29天
			if(date.day>=1&&date.day<=28)
				return 1;
			else 
				return 0;
		}else{
			if(date.day>=1&&date.day<=29)//是平月28天
				return 1;
			else
				return 0;

		}
	}
	
		
}
//高斯日记算法
Date Newtime(Date date,int days){
	Date later;
	int a[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
	int i=0;
	if(Check_y(date)==2)//是闰年
		a[2]=29;
	else 
		a[2]=28;
	for(i=0;i<days;i++){
		date.day %= a[date.month];
		date.day++;
		if(date.day==1){//如果是该月的最后一天
			date.month %= 12;
			date.month++;
			if(date.month==1){
				date.year++;
			}
		}
	}
	later=date;
	return later;
}
发布了128 篇原创文章 · 获赞 26 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/yky__xukai/article/details/102847836