首页 > 代码库 > 日期计算
日期计算
有一个很方便的公式用来计算日期对应的星期数
1 #include <iostream> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <stdio.h> 5 using namespace std; 6 7 int month_day[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; 8 int daytime=0; 9 int total=0; 10 int is_leap_year(int y) 11 { 12 if(y%400==0||(y%4==0&&y%100!=0)) return 1; 13 else return 0; 14 } 15 int main() 16 { 17 int y,m,d,k; 18 cin>>y>>m>>d>>k; 19 total=d+k; 20 21 if(m==2) 22 { 23 month_day[1]+=is_leap_year(y); 24 } 25 while(total>month_day[m-1]) 26 { 27 total-=month_day[m-1]; 28 m++; 29 if(m==2) 30 { 31 month_day[1]+=is_leap_year(y); 32 } 33 if(m==13) 34 { 35 m=1; 36 y++; 37 month_day[1]=28; 38 } 39 } 40 41 cout<<y<<"-"; 42 if(m<10) 43 { 44 cout<<"0"<<m<<"-"; 45 } 46 else 47 { 48 cout<<m<<"-"; 49 } 50 if(total<10) 51 { 52 cout<<"0"<<total; 53 } 54 else 55 { 56 cout<<total; 57 } 58 cout<<endl; 59 60 return 0; 61 }
写得有点乱,脑子混乱。。。
1 #include <iostream> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <stdio.h> 5 using namespace std; 6 int getW(int y,int m,int d) 7 { 8 if(m==1) 9 { 10 m=13; 11 y--; 12 } 13 if(m==2) 14 { 15 m=14; 16 y--; 17 } 18 return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 19 } 20 int month_day[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; 21 int is_leap_year(int y) 22 { 23 if(y%400==0||(y%4==0&&y%100!=0)) return 1; 24 else return 0; 25 } 26 int main() 27 { 28 int y,arr[8][2],total=365,countt=12,de=0; 29 int m,d,w; 30 cin>>y; 31 month_day[1]+=is_leap_year(y); 32 total+=is_leap_year(y); 33 for(int i=1; i<=4; i++) 34 { 35 cin>>m>>d; 36 if(i==1) 37 { 38 if(getW(y,m,d)==5||getW(y,m,d)==6) 39 { 40 de++; 41 } 42 if(d<month_day[m-1]) 43 { 44 if(getW(y,m,d+1)==5||getW(y,m,d+1)==6) 45 { 46 de++; 47 } 48 if(d+1<month_day[m-1]) 49 { 50 if(getW(y,m,d+2)==5||getW(y,m,d+2)==6) 51 { 52 de++; 53 } 54 else 55 { 56 if(getW(y,m+1,1)==5||getW(y,m+1,1)==6) 57 { 58 de++; 59 } 60 } 61 } 62 } 63 else 64 { 65 if(getW(y,m+1,1)==5||getW(y,m+1,1)==6) 66 { 67 de++; 68 } 69 if(getW(y,m+1,2)==5||getW(y,m+1,2)==6) 70 { 71 de++; 72 } 73 } 74 } 75 else 76 { 77 if(getW(y,m,d)==5||getW(y,m,d)==6) 78 { 79 de++; 80 } 81 } 82 } 83 if(getW(y,1,1)==5||getW(y,1,1)==6) 84 { 85 de++; 86 } 87 if(getW(y,5,1)==5||getW(y,5,1)==6) 88 { 89 de++; 90 } 91 if(getW(y,10,1)==5||getW(y,10,1)==6) 92 { 93 de++; 94 } 95 if(getW(y,10,2)==5||getW(y,10,2)==6) 96 { 97 de++; 98 } 99 if(getW(y,10,3)==5||getW(y,10,3)==6) 100 { 101 de++; 102 } 103 if(getW(y,12,25)==5||getW(y,12,25)==6) 104 { 105 de++; 106 } 107 cin>>w; 108 int day=1; 109 //计算双休 110 while(w<=7) 111 { 112 if(w==6||w==7) 113 { 114 countt++; 115 } 116 w++; 117 day++; 118 } 119 while(day+7<=total) 120 { 121 day+=7; 122 countt+=2; 123 } 124 if(total-day==5) 125 { 126 countt++; 127 } 128 if(total-day==6) 129 { 130 countt+=2; 131 } 132 //双休+放假-重合天数 133 cout<<countt-de<<endl; 134 return 0; 135 }
日期计算
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。