某年某月某日是星期几的算法思想和编程
我采用的是维基百科上的算法
把四个数加起来然后同余7就是所求的星期数。这四个数分别是:
C:2(3-(c mod4))
Y:(y mod28+[y mod28/4])mod7(其中闰年1、2月份Y-1)
M:((3.4+(m-3)mod12×2.6)mod7(1、2月份的M值分别为7,3)
D:d mod7
就是说——W=(C+Y+M+D)mod7
举例说明:2008年12月10日
(6+3+5+3)mod7=3,即该日是星期三,其中c=20、y=8、m=12、d=10
再举一例:2008年2月10日
(6+2+3+3)mod7=0,即该日是星期日,其中c=20、y=8、m=2、d=10
还举一例:1842年8月29日
(2+3+2+1)mod7=1,即该日是星期一,其中c=18、y=42、m=8、d=29
public class Today
{
public static void main(String[] args)
{
String[] a = null;
System.out.println("请输入年月日,以逗号隔开:");
Scanner sc = new Scanner(System.in);
String str = sc.next();
a = str.split(",");
int y = Integer.valueOf(a[0]);
int m = Integer.valueOf(a[1]);
int d = Integer.valueOf(a[2]);
int M = 0;
int year = 0;
int Y = 0;
int a1 = y % 10;
int a2 = y % 100/10;
int a3 = y % 1000/100;
int a4 = y / 1000;
int c = a4*10+a3; //得到世纪数;
// 得到年份;
if (a2 == 0)
year = a1;
else
year = a2*10+a1;
int C = 2*(3-(c % 4));
if(m==1)
M = 7;
else if(m == 2)
M = 3;
else
M = ((int) (3.4+(m-3)%12*2.6))%7;
if(y%400==0||y%4==0&&y%100!=0&&m<3)
Y = (year%28+(year%28)/4)%7-1;
else
Y = (year%28+(year%28)/4)%7;
int D = d % 7;
int week = (C + Y + M + D) % 7;
String w = "日一二三四五六".substring(week, week+1);
System.out.println(str + "是星期" + w);
}
}
如果有不对的地方,请批评指正;