1. 程式人生 > >數學-泰勒公式-日曆

數學-泰勒公式-日曆

這題不知老師為啥把題目給關了,幸好在關題目之前就做出來並提交通過了。
相關資料見下面連結:
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;
}