- 计算日期到天数转换
- 日期累加
- 打印日期
- 日期差值
链接: 计算日期到天数转换
思路1:常规的思路是用while循环从这个月的一号循环到该天,但是其实还有很简单的思路,也就是下面的思路二,还有主要讲的也是思路二。
思路二:用一个数组存放每个月累加起来的天数,如第一个月是31天,第二个月是存放31+28=59天,以此类推,这样子存放是有好处的。
我们求这年到某一天的总天数就是这个月的前一个月,以及这个月以前所有天数累加起来的天数和加上该月的天数!但是别忘了判断这一年是否为闰年以及这一天是否超过了二月(因为还没过二月的话没必要加一天)
代码:
#include日期累加using namespace std; int main() { int arr[13] = { 0,31,59,90,120,151,181,212,243,273,304,334,365}; int year, month, day; cin >> year >> month >> day; //让n赋值上从这年到这个月的上个月的总天数再加上现在的天数day int n = arr[month - 1] + day; //记得判断是否为闰年 if(month > 2 && (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))) n++; cout << n; return 0; }
链接: 日期累加
思路:因为这道题要求m个测试用例,所以要循环m遍。并用nowday记录当月最大天数,便于后面的判断。
然后用while子循环,将addday的天数累加到day和month上,然后addday–。
每次循环都判断一下当天是不是超过当月最大天数,以及该月是不是超过了12月。
代码:
#includeusing namespace std; int main() { int arr[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int m = 0; cin >> m; int year = 0, month = 1, day = 1, addday = 0; //因为有多组测试用例,所以用m来循环 for(int i=0; i cin >> year >> month >> day >> addday; int nowday = arr[month];//用nowday记录当月最大天数 while(addday > 0) { day++; if((month == 2) && ((year%4==0 && year%100!=0) || (year%400==0))) { nowday=29; } //判断天数是否大于当月最大天数 if(day > nowday) { day = 1; month++; //判断月数是否大于12 if(month > 12) { month=1; year++; } nowday=arr[month]; } addday--; } //把天和月按格式打印 if(day<10 && month<10) cout< =10) cout< =10 && month<10) cout<
打印日期
链接: 打印日期思路:先用sday存放一下总天数,然后将sday判断这年是不是闰年,然后用while循环将sday拆成day和month,每次day++,sday–,直到sday等于0。
然后记得判断day是不是达到了该月的最大天数,是的话重置一下,还要判断一下月是不是大于12,是的话也要重置一下。代码:
#includeusing namespace std; int main() { int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int year=0,month=1,day=0,sday=0; cin>>year>>sday; //判断一下是不是闰年 if((year % 4 ==0 && year % 100 != 0) || (year % 400 == 0)) arr[2]=29; //将总天数转化成月和天 while(sday > 0) { day++; if(day > arr[month]) { day=1; month++; if(month > 12) { month=1; year++; } } sday--; } //判断一下天数和月打印的格式 if(day<10 && month<10) cout< =10) cout< =10 && month<10) cout<
日期差值
链接: 日期差值思路:先把两个数的年月日分别用三个变量存起来,保持max部分为大的日期,min为小的日期。
然后开始循环,直到min的年月日等于max的年月日为止,用count来统计他们之间相差的天数。
记得判断天是否超过了当月的天数和月数是否超过12月,有的话重置一下!代码:
#includeusing namespace std; int main() { int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int day1,day2,count=0; cin>>day1>>day2; //保持max为大的那个数,然后分解出来 int max=day1>day2?day1:day2; int maxday=max%100; int maxmonth=(max/100)%100; int maxyear=max/10000; //保持min为小的那个数,然后分解出来 int min=day1>day2?day2:day1; int minday=min%100; int minmonth=(min/100)%100; int minyear=min/10000; //直到三个值相等才退出循环 while((minyear!=maxyear)||(minmonth!=maxmonth)||(minday<=maxday)) { count++; minday++; //判断一下天数是否超过当月的最大天数 if(minday>arr[minmonth]) { minday=1; minmonth++; //判断一下月数是否超过12 if(minmonth>12) { minmonth=1; minyear++; } } } cout<



