我如何编写一个告诉星期几的程序?(泽勒全等)

How I write a program that tells the day of the week? (Zeller's congruence)

本文关键字:程序 何编写 一个      更新时间:2023-10-16

这是我目前所拥有的,但我没有得到正确的输出。

#include <iostream>
using namespace std;
int main(void) {
int year_number, month_number, day_number;
cout << "What year were you born in?n";
cin >> year_number;
cout << "What month were you born in?n";
cin >> month_number;
cout << "What day were you born on?n";
cin >> day_number;
month_number -= 2;
if (month_number < 0) {
month_number += 12;
year_number -= 1;
}
month_number *= 83 / 32;
month_number += day_number;
month_number += year_number;
month_number += (year_number / 4);
month_number -= (year_number / 100);
month_number += (year_number / 400);
day_number = month_number % 7;
cout << "The weekday number you were born on is " << day_number << endl;
return 0;
}

以下是说明:

  1. 将月数减少 2;
  2. 如果月数小于 0,则将其递增 12,将年份递减 1;
  3. 取月份数,乘以83再除以32;
  4. 将日数添加到月份;
  5. 将年号添加到月份;
  6. 将年/4 添加到月份;
  7. 从月中减去年/100;
  8. 将年/400 添加到月份;
  9. 找到将月份除以 7 的剩余时间;

我不确定你从哪里得到Zellers全等的那些说明。但这里有一个遵循维基百科公式的实现。

#include <iostream>
#include <math.h>  
int main(void) {
std::string days[7] = { "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" };
int year_number = 2020;
int month_number = 1;
int day_number = 22;
if( month_number < 3 ){
month_number += 12;
year_number -= 1;
}
int century_number = year_number / 100;
year_number = year_number % 100;
int day = day_number + floor( (month_number + 1) * 13.0 / 5.0  ) + 
year_number + floor( year_number / 4.0 ) +
floor( century_number / 4.0 ) -
2 * century_number;
day = day % 7;
std::cout << "The weekday you were born on is " << days[day] << std::endl;
return 0;
}

现场演示

你的另一个问题可能是你没有把你的中间结果floor在你应该的地方。