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

mac2024-11-23  31

//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; }

 

最新回复(0)