如何解决该程序为闰年提供了错误的输出负载变量的值是错误的我认为 Ex.1900,1700
*程序为不是闰年的世纪年提供错误输出 Ex.1900,1700。程序为闰年提供错误输出负载变量的值是错误的,我认为 Ex.1900,1700。 *
#include <iostream>
using namespace std;
int main()
{
int year;
bool t1=true;
cout<<t1;
bool t2=false;
cin>>year;
if(year%4==0)
{
int value=year%100?year%400?t1:t2:t1;
cout<<value;
if(value==t1)
{
cout<<"leap year";
}
else
{
cout<<"not a leap year";
}
}
else
{
cout<<"not a leap year";
}
}
解决方法
当
year%100
可被 100 整除(余数为零)时,year
变为假;当 year
不能被 100 整除(余数不为零)时,
year%400
变为真。
year
可被 400 整除(余数为零)时,year
变为假;当 year%100
不能被 400 整除(余数不为零)时,
year%400
变为真。
因此,当int value=year%100?year%400?t1:t2:t1;
为假而bool value=year%100?t1:year%400?t2:t1;
为真时,您必须判断该数字不是闰年,否则判断为不是闰年。
总之,行
int
应该
bool
另外我认为在这里使用 PageView
来分配 NotificationListener<OverscrollIndicatorNotification>
变量是不合理的。
除了 MikeCAT 的答案中的修复之外,您还可以将代码显着简化为几行:
#include <iostream>
int main()
{
int year;
std::cin>>year;
bool leap = (year % 4 == 0) && ( (year % 100 != 0) || (year % 400 == 0) );
if(leap)
{
std::cout<<"leap year";
}
else
{
std::cout<<"not a leap year";
}
}
您可以使用 0
等价于 false
以使其更短,但我认为第一个版本更具可读性:
bool leap = !(year % 4) && ( (year % 100) || !(year%400) );
,
一旦编译器正确实现了 C++20(尚未发布),您就不必重新发明轮子,可以使用 std::chrono::year::is_leap
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
year y = 1900y;
std::cout << "year: " << static_cast<int>(y)
<< " is " << (y.is_leap()?"":"not ") << "a leap year\n";
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。