【问题标题】:Leap year calculation in C++ for Homework assignment?在 C++ 中计算家庭作业的闰年?
【发布时间】:2012-09-17 11:54:18
【问题描述】:
#include <iostream>
using namespace std;

int main() {
    int what_year;

    cout << "Enter calendar year ";
    cin >> what_year;

    if (what_year - (n * 4) = 0 ) {

        cout << "leap year";
    }

    else
    {
        cout << "wont work";
    }

    system("Pause");
    return 0;
}

试图为班级编写程序,寻找闰年.. 不知道如何询问 C++ 整数是否可以被数字整除?

【问题讨论】:

标签: c++ leap-year


【解决方案1】:

闰年规则是

 if year modulo 400 is 0 then
   is_leap_year
else if year modulo 100 is 0 then
   not_leap_year
else if year modulo 4 is 0 then
   is_leap_year
else
   not_leap_year

http://en.wikipedia.org/wiki/Leap_year#Algorithm

您可以使用modulo operator 来查看一个数是否可​​以被另一个数整除,即除法是否没有余数。

2000 % 400 = 0 // 能被 400 整除

2001 % 400 = 1 // 不能被 400 整除

有趣的是,一些著名的软件实现没有应用“400”部分,这导致这些系统不存在 2000 年 2 月 29 日。

【讨论】:

  • @KevinP.Rice:很酷的优化。太糟糕了,维基百科不会接受它作为现有文章的补充。
【解决方案2】:

使用取模函数。

if ((year % 4) == 0)
{
//leap year
}

请注意,这不考虑 100 年和 400 年的跳跃。

正确的代码类似于

if(((year%4) == 0) && (((year%100)!=0) || ((year%400) == 0))
{
//leap year
}

【讨论】:

  • 我的代码确实考虑了 400 年的闰年。假设年份为 2400,则结果为 (true && (false || true)) = (true && true) = true。
  • 嗯。是的,您的代码显然是 400 闰年。我不知道为什么我以前没有看到。 :)
【解决方案3】:

改用这个

bool bLeapYear = false;
if ((what_year % 4) ==0)  {
     if ((what_year % 100) == 0) {
          bLeapYear = ((what_year % 400) == 0);
     } else {
          bLeapYear = true;
     }
     // leap year
}

这需要除以 4 后一年的剩余时间,并测试它是否为零。使用 = 而不是 == 也有问题 - 后者测试相等性,前者分配一个值。

编辑:根据下面史蒂夫的评论编辑。

【讨论】:

  • 1900年不是闰年,这个公式不正确support.microsoft.com/kb/214019
  • @Steve 哇,我从来不知道这个信息。我会相应地进行编辑。
  • 请注意,大约 8000 年后,日历将再次落后一天。不过,这不是我们的问题 :)
【解决方案4】:

根据一些决定一年是否为闰年的规则,一年应该能被 4 整除,对于那些能被 100 整除的年份,它也应该能被 400 整除。

int year;
cout << "Enter a year: ";
cin >> year;

if (year%4 == 0) {
    if (year%100 == 0) {
        if (year%400 == 0) {
            cout << year << " is a leap year.";
        }
        else {
            cout << year << " is not a leap year.";
        }
    }
    else {
        cout << year << " is a leap year.";
    }
}
else {
    cout << year << " is not a leap year.";
}

return 0;}

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2023-03-10
    相关资源
    最近更新 更多