數學-泰勒公式-日曆
阿新 • • 發佈:2018-12-02
這題不知老師為啥把題目給關了,幸好在關題目之前就做出來並提交通過了。
相關資料見下面連結:
https://blog.csdn.net/blackgooes/article/details/51364038
結論整理:
公式為:w=((c/4)-2c+y+y/4+(13(mon+1)/5)+d-1)%7;
注意事項:
1、m=1時,取m=13;m=2時,取m=14;
2、w要對7取模,取模後要保證w在0-6的範圍,增加if判斷處理;
3、輸出注意用\t輸出tab鍵;
網上的推算函式:
#include<iostream> using namespace std; //泰勒公式推算星期幾 int weekday(int y,int m,int d) { if(m==1) { m=13;y--; } if(m==2) { m=14;y--; } int c = y/100; y=y%100; return ((c/4)-2*c+y/4+y+(13*(m+1)/5)+d-1)%7; } int main() { int y,m,d; while(cin>>y>>m>>d) { int wd=weekday(y,m,d); if(wd<0) wd+=7; switch(wd) { case 6:cout<<"星期六";break; case 0:cout<<"星期天";break; case 1:cout<<"星期一";break; case 2:cout<<"星期二";break; case 3:cout<<"星期三";break; case 4:cout<<"星期四";break; case 5:cout<<"星期五";break; } cout<<endl; } return 0; }
娃的程式碼記錄如下:
//#include<iostream> #include<cstdio> using namespace std; bool run(int n){ if (n%4==0){ if (n%100==0&&n%400!=0) return 0; if (n%400==0) return 1; return 1; } return 0; } int riqi(int n,int m){ if (m==1||m==3||m==5||m==7||m==8||m==10||m==12) return 31; else if (m!=2) return 30; else { if (run(n)) return 29; return 28; } } int main() { int n,m,d=1; //cin>>n>>m; scanf("%d%d",&n,&m); int w; int c=n/100,y=n%100,mon=m; if (mon<3) { c=(n-1)/100;y=(n-1)%100;mon=m+12; } w=((c/4)-2*c+y+y/4+(13*(mon+1)/5)+d-1)%7; //w=y+y/4+c/4-2*c+(26*(m+1))/10+d-1; if (w<0) w+=7;//先取模,再用if判斷,不要用while判斷。 //w%=7; //cout<<w<<endl; printf("%c\t%c\t%c\t%c\t%c\t%c\t%c\n",'S','M','T','W','T','F','S'); //cout<<"S M T W T F S"<<endl; for (int i=1;i<=w;i++) { //cout<<" "<<" "; printf("\t"); } for (int i=1;i<=riqi(n,m);i++) { //cout<<i; printf("%d",i); if (w==6) printf("\n"); else printf("\t"); w=(w+1)%7; } return 0; }