gpt4 book ai didi

c - 闰年 - 仅使用 C 中的算术运算符

转载 作者:行者123 更新时间:2023-12-04 02:27:18 26 4
gpt4 key购买 nike

我有一个我见过的最奇怪的练习:我必须通过在控制台中扫描年份来找到闰年,并控制它是否是闰年。

只能使用+ -/* % 作为算术运算符;我不允许使用任何其他运算符或函数。

这是我目前所拥有的:

   int year = 0;
bool b = false;

printf ("Type in a year: ");

int helpVar = 1000;
for (int i = 0; i < 4; i++) {
year += (getchar() - '0') * helpVar;
helpVar = helpVar / 10;
}

b = (((year % 4) + (year % 100) + (year % 400)) + 1) % 2;

所以我不明白我在这里做错了什么。到目前为止它有效,唯一让我害怕的是“1900”年。根据我的代码,它不应该是闰年,但似乎是闰年。

我在这里错过了什么?

最佳答案

这是一种可能性(也许不是最短的——显然只适用于公历):

b = (((year-1)%4)+1)/4 - (((year-1)%100)+1)/100 + (((year-1)%400)+1)/400;

只有当 year 的倍数时,((year-1) % n) + 1 才等于 n >n(对于正 year),否则小于 n。因此,如果将其除以 n,当且仅当 (year % n == 0) 时,您得到 1

因为如果 year%4==0 不是,year%100==0 就不可能是 true,所以您可以将它们相互减去,但是添加 year%400==0 学期末。

关于c - 闰年 - 仅使用 C 中的算术运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66568146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com