计算星期

题目内容:

给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。

输入格式:

年 月 日

输出格式:

0~6。
    星期日用 0 表示,星期一用 1 表示,星期二用 2 表示......星期六用 6 表示。

假设年份大于1900。先想一想:我们现在只会使用 if 语句,该如何建立数学模型?

输入样例:

2013 3 11

输出样例:

1

输入样例:

2013 13 15

输出样例:

month is error.

程序代码:*

#include "stdio.h"
void CaculateWeekDay(int y,int m, int d);
int JudgeDay(int y, int m, int d);
int leap (int y);

int main()
{
  int year=0,month=0,day=0;

scanf("%d%d%d",&year,&month,&day);
  if(month>12||month<1)
  {
  printf("month is error.");
  if(JudgeDay(year,month,day))
  printf("day is error.");
  }
  else if(JudgeDay(year,month,day))
  printf("day is error.");
  else
    CaculateWeekDay(year,month,day);

return 0;

}
int leap (int y)//判断是否是闰年
{
  if(y%100!=0&&(y%4==0||y%400==0))
  return 1;
  else return 0;
}

void CaculateWeekDay(int y,int m, int d)//计算是星期几
{

int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  int i;

if(m>2&&leap(y))d++;
  for(i=1;i<m;i++)
  {
  d+=mon[i];
  }
d=y-1+(y-1)/4-(y-1)/100+(y-1)/400+d;

switch(d%7)
{
case 0: printf("0\n"); break;
case 1: printf("1\n"); break;
case 2: printf("2\n"); break;
case 3: printf("3\n"); break;
case 4: printf("4\n"); break;
case 5: printf("5\n"); break;
case 6: printf("6\n"); break;
}
}
int JudgeDay(int y, int m, int d)//判断输入是否合法
{
if (d <= 0 || d> 31)
return 1;
else if (leap(y))
{
  switch (m)
  {
case 4:
case 6:
case 9:
case 11: if (d== 31) return 1; break;
case 2: if (d> 29) return 1; break;
default : return 0; break;
  }
}
else
{
switch (m)
  {
case 4:
case 6:
case 9:
case 11: if (d== 31) return 1; break;
case 2: if (d> 28) return 1; break;
default : return 0; break;
  }
}
return 0;
}

时间: 2024-10-07 05:02:37

计算星期的相关文章

08--MOOC--C/C++ 根据年月日计算星期几——蔡勒公式篇

C/C++ 根据年月日计算星期几——蔡勒公式篇 蔡勒公式  蔡勒(Zeller)公式:是一个计算星期的公式.随便给一个日期,就能用这个公式推算出是星期几.蔡勒公式如下:W = [C/4] - 2C + y + [y/4] + [13 * (M+1) / 5] + d - 1或者是:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1公式中的符号含义如下:w:星期: w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六c:世纪-1(前两

C# 根据日期计算星期几

1 region 根据年月日计算星期几(Label2.Text=CaculateWeekDay(2004,12,9);) 2 /// <summary> 3 /// 根据年月日计算星期几(Label2.Text=CaculateWeekDay(2004,12,9);) 4 /// </summary> 5 /// <param name="y">年</param> 6 /// <param name="m">

计算星期几的算法

int dayofweek(int y, int m, int d) /* 0 = Sunday */ { static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4}; y -= m < 3; return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; } 计算星期几的算法;

随机输入日期计算星期几(1900年1月1日为基础)

已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几 代码如下(未改进),欢迎批评指正 year=int(input('year')) month=int(input('month')) day=int(input('day')) if year >=1900:#大于等于1900 ryear =1900 sum =0 while ryear < year:#1901 if ((ryear % 4 == 0) and (ryear %100 !=0))or(ryear % 400 =

蔡勒公式——根据年月日计算星期几

蔡勒(Zeller)公式,是一个计算星期的公式,随便给一个日期,就能用这个公式推算出是星期几. 计算公式 由于罗马教皇搞了一些骚操作,这里给出的公式仅适用于1582年10月15日以后的星期,详情可参考 格里高利历 符号意义 w:星期: w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六 c:世纪(注:一般情况下,在公式中取值为已经过的世纪数,也就是年份除以一百的结果,而非正在进行的世纪,也就是现在常用的年份除以一百加一:不过如果年份是公元前的年份且非

oracle根据日期计算星期几

工作中用到的,在存储过程中的语句,简单记下: /** 判断输入日期是星期几 */ select decode(to_char(to_date(iv_date,'yyyy-mm-dd'), 'day'),'星期一','1','星期二','2','星期三','3','星期四','4','星期五','5','星期六','6','7') into vi_weeknum from dual; /** 计算离输入日期最近的星期一的日期 */ select to_char((to_date(iv_date,'

【Zeller公式计算星期几】HDU 6112 今夕何夕

acm.hdu.edu.cn/showproblem.php?pid=6112 [思路] 公式计算即可,注意特判2月29号 Zeller公式里,计算出的week不能直接模7,要保证week是正数 [AC] 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include<cmath&g

计算星期几的函数

$scope.getweekday = function (cdate) { var arys1 = new Array(); arys1 = cdate.split('-'); //日期为输入日期,格式为 2013-3-10 var ssdate = new Date(arys1[0], parseInt(arys1[1] - 1), arys1[2]); var week = ssdate.getDay() //就是你要的星期几 if (week != 0) { return week; }

An problem about date 根据年月日计算 星期几

/W = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7(1.2月需要看作上一年的13.14月) #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<set>