如题所示,这个算法就是写起来麻烦一点,不过还是很简单的,思路清晰就非常好做
思路:用两套数组分别存储每个月的天数,分别是闰年和非闰年,分别为num1[] 和 num2[];
**然后就是先计算年和年之间的差距{
相距一年:为第一年的剩下日子+第二年开始的日子
相距一年以上:为初始年的剩下日子+末尾年开始的日子+中间年份日子
相距几个月:计算几个月的日期差
}**
以上思路就是如此,代码也很简单,附上相关注释,一看就懂,不要觉得多,都是一个个的函数,一看就能明白
#include <iostream>using namespace std;int num1[12] = {31,29,31,30,31,30,31,31,30,31,30,31};int num2[12] = {31,28,31,30,31,30,31,31,30,31,30,31};int frontday(int year,int month,int day){ //计算这年过了多少天了 int sum=0; if((year%100!=0 &&year%4==0) || year%400==0){ for(int i=0;i<month-1;i++){ sum+=num1[i]; } return sum+day; } else{ for(int i=0;i<month-1;i++){ sum+=num2[i]; } return sum+day; }}int backday(int year,int month,int day){//计算这年还剩多少天 int sum=0; if((year%100!=0 &&year%4==0) || year%400==0){ for(int i=0;i<month-1;i++){ sum+=num1[i]; } return 366-(sum+day); } else{ for(int i=0;i<month-1;i++){ sum+=num2[i]; } return 365-(sum+day); }}int isyear(int year){ //计算某年是否是闰年,返回不同天数 if((year%100!=0 &&year%4==0) || year%400==0){ return 366; } else return 365;}int JudgeMonthDay(int year,int month1,int month2,int day1,int day2){ //计算几个月之间的天数,这个思路同计算不同年之间的天数 int sum=0; if((year%100!=0 &&year%4==0) || year%400==0){ if(month1==month2) return day2-day1; if((month2-month1)==1){ return (num1[month1-1]-day1+day2); } if((month2-month1)>1){ sum = num1[month1-1]-day1+day2; for(int i=month1+1;i<=month2-1;i++){ sum+=num1[i-1]; } return sum; } } else{ if(month1==month2) return day2-day1; if((month2-month1)==1){ return num2[month1-1]-day1+day2; } if((month2-month1)>1){ sum = num2[month1-1]-day1+day2; for(int i=month1+1;i<=month2-1;i++){ sum+=num2[i-1]; } return sum; } }}void main(){ cout<<"请输入两个日期,分别为年月日,都用空格隔开"<<endl; int year1,month1,day1; int year2,month2,day2; cin>>year1>>month1>>day1>>year2>>month2>>day2; int sum=0; //以下分类讨论计算不同年之间天数 if((year2-year1)<0) cout<<"应该先输入小的年份,输入错误"; if((year2-year1)==0){ cout<<JudgeMonthDay(year1,month1,month2,day1,day2)<<endl; } if((year2-year1)==1) cout<<backday(year1,month1,day1)+frontday(year2,month2,day2)<<endl; if((year2-year1)>1){ sum = backday(year1,month1,day1)+frontday(year2,month2,day2); for(int i=year1+1;i<=year2-1;i++){ sum+=isyear(i); } cout<<sum<<endl; } system("pause");}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
附上一个可以用来测试的链接地址:
http://day.9om.com/