|
> 下のソースプログラムをコンパイルして
> 西暦を入力するところに400を入力すると
> 普通年がでてしまいます。
閏年が出ます。事実をしっかり把握しましょう。
「ただし」で始まる判定は例外ですから、前に持っていきます。
#include <stdio.h>
int main(void)
{
int year;
printf("西暦を入力:");
if (scanf("%d", &year) != 1) return 1;
if (year % 400 == 0)
puts("閏年です。");
else if (year % 100 == 0)
puts("平年です。");
else if (year % 4 == 0)
puts("閏年です。");
else
puts("平年です。");
return 0;
}
400で割り切れるか、または 100で割り切れず 4で割り切れると、閏年。
これを、|| や && を使って書くとこうなります。
if ((year % 400 == 0) || (year % 100 != 0) && (year % 4 == 0))
puts("閏年です。");
else
puts("平年です。");
でも、次のように書いたほうが、効率がよいはず。
if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0))
puts("閏年です。");
else
puts("平年です。");
なぜなら、平年の数のほうが多いから、最初に 4 で割り切れないことが多く、
その場合、100 や 400 で割り算をしなくて済みますから。
|