公司建设网站网络营销推广公司名称
对于这个问题,首先想到后天就是日再加2,那么如果输入的这个日期是每个月的前些天,输出结果就是年,月,日+2.这么简单。但是如果输入的这个日期是月末的两天,那月份一定会加1,如果这个月是12月,那年份也要加1,月份变为1,日期也会改变。而且,每个月的天数都不一样,更需要注意的是2月还分闰年和平年,一个29天一个28天。
所以,解决这个问题首先要对所有可能的日期进行分类。
我初步分为:2月,12月,大月(31天),小月(30天)四个大类。其中2月再细分为28和29天。
其次,再对这些月再分为是否是月末的两天(牵扯到年月的改变)。
接下来看代码:
#include
#include
int main()
{
printf("请输入年月日,以空格隔开,回车结束\n");
int year,mounth,day;
scanf("%d%d%d",&year,&mounth,&day);
/*
//自定义的函数。用来做月份不需要变,只变日的输出。希望可以简化代码量
int out(year,mounth,day){
printf("%d %d %d",year,mounth,day+2);
}
*/
//先分离每年的2月
if(mounth==2){
//如果是闰年的2月,每月29天
if(year%4==0){
//如果是月末的两天,输出的月份会加一
if(day>=28){
printf("%d %d %d",year,mounth+1,day+2-29);
}
//不是月末的;两天,输出依然是本月,只改变日
else{
printf("%d %d %d",year,mounth,day+2);
}
}
//如果是平年的2月,每月28天
else{
//并且是月末的两天,输出的月份会加1
if(day>=27){
printf("%d %d %d",year,mounth+1,day+2-28);
}
//不是月末的那两天,输出依然是本月,只改变日
else{
printf("%d %d %d",year,mounth,day+2);
}
}
}
//再处理每年的12月
else if(mounth==12){
//如果是月末的两天,输出的年份会加1,月份会变成1.日期也会变
if(day>=30){
printf("%d %d %d",year+1,1,day+2-31);
}
//不是月末的那两天,输出依然是本月,只改变日
else{
printf("%d %d %d",year,mounth,day+2);
}
}
//再处理其他的大月,31天
else if(mounth==1||mounth==3||mounth==5||mounth==7||mounth==8||mounth==10){
//如果是月末的两天,月份会加1.日期也会变
if(day>=30){
printf("%d %d %d",year,mounth+1,day+2-31);
}
//不是月末的那两天,输出依然是本月,只改变日
else{
printf("%d %d %d",year,mounth,day+2);
}
}
//最后处理小月,30天
else if(mounth==4||mounth==6||mounth==9||mounth==11){
//如果是月末的两天,月份会加1.日期也会变
if(day>=29){
printf("%d %d %d",year,mounth+1,day+2-30);
}
//不是月末的那两天,输出依然是本月,只改变日
else{
printf("%d %d %d",year,mounth,day+2);
}
}
//再做一个简单的异常处理
else if(mounth>12||mounth<1||day<1||day>31){
printf("输入有误,请重启程序再输入正确的日期");
}
return 0;
}