蔡勒公式计算星期几

作者:追风剑情 发布于:2019-10-18 18:04 分类:Algorithms

蔡勒公式(这里借用网上一张图)

1111.png

例如:2019年10月18

c: 代表20

y: 代表19

m: 代表10

d: 代表18

[ ]: 代表取整

1、2月要当成上一年的13、14月来计算

示例:计算星期几

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. void get_input(double *c, double *y, double *m, double *d);
  6. int calc_week(double c, double y, double m, double d);
  7. const char* to_week_str(int week);
  8.  
  9. int main(int argc, char* argv[])
  10. {
  11. double c, y, m, d;
  12. get_input(&c, &y, &m, &d);
  13.  
  14. int week = calc_week(c, y, m, d);
  15. printf("%d%d/%d/%d 是 %s \n", (int)c, (int)y, (int)m, (int)d, to_week_str(week));
  16. system("pause");
  17. return 0;
  18. }
  19.  
  20. void get_input(double *c, double *y, double *m, double *d)
  21. {
  22. int year;
  23. int month;
  24. int day;
  25. char ch;
  26.  
  27. if (scanf("%d", &year) != 1) {
  28. puts("read year error");
  29. while ((ch = getchar()) != '\n'); //处理多余的输入字符
  30. return;
  31. }
  32.  
  33. ch = getchar(); //跳过'/'符号
  34.  
  35. if (scanf("%d", &month) != 1) {
  36. puts("read month error");
  37. while ((ch = getchar()) != '\n'); //处理多余的输入字符
  38. return;
  39. }
  40.  
  41. ch = getchar(); //跳过'/'符号
  42.  
  43. if (scanf("%d", &day) != 1) {
  44. puts("read day error");
  45. while ((ch = getchar()) != '\n'); //处理多余的输入字符
  46. return;
  47. }
  48. while ((ch = getchar()) != '\n'); //处理多余的输入字符
  49.  
  50. *c = year / 100;
  51. *y = year % 100;
  52. *m = month;
  53. *d = day;
  54. }
  55.  
  56. /*
  57. c: 表示年份的前两位数字
  58. y: 表示年份的后两位数字
  59. m: 表示月份,对于1、2月需看作前一年的13、14月
  60. d: 表示日
  61. */
  62. int calc_week(double c, double y, double m, double d)
  63. {
  64. if (1 == m) {
  65. //看作上一年的13月
  66. m = 13;
  67. y--;
  68. }
  69.  
  70. if (2 == m) {
  71. //看作上一年的14月
  72. m = 14;
  73. y--;
  74. }
  75. //蔡勒公式
  76. int w = (int)(y + (int)(y / 4) + (int)(c / 4) - 2 * c + (int)(13 * (m + 1) / 5) + d - 1) % 7;
  77. return w;
  78. }
  79.  
  80. const char* to_week_str(int week)
  81. {
  82. const char* weeks[7] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
  83. return weeks[week];
  84. }


运行测试

222.png

3333.png


4444.png

55555.png


666.png

77777.png

标签: Algorithms

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号