質問: うるう年を求めるプログラム 1900から2100年のうるう年を求めるプログラムが作りたいのですが どうしたらよいでしょうか? forを使って1900から2100までかぞえる。 4で割り切れるものは閏年 しかし100で割り切れるものは閏年でない。 400で割り切れるものは閏年である。 最後の条件の分岐から閏年のみを表示させたいのですがわかりません 。
回答: 誤魔化して書くなら、こう。 int nen; for (nen = 1901;nen < 2100;nen++) { if ((nen & 3) == 0) ptintf("%d年は閏年\n",nen); } ループの最初と最後の、1900年と2100年は通常年なので、ループしないで除外し、4で割れるかしか見ていない。 実際、1901~2099年の期間で使用する、年を下2桁しか持たないカレンダーicチップは、閏年の判定は「4で割り切れるなら閏年」としか判定しない。 更に言うなら年の割り算さえしない。年を保持するメモリの下位2ビットを取り出し、この2ビットが共に0の時は閏年、と処理している。 どうしてこういう手抜きをするかと言えば、計算が簡単になれば回路も簡単になり、それだけコストダウンになるのが理由。 ループから1900と2100を除外しないなら、こう。 int nen; for (nen = 1900;nen <= 2100;nen++) { if ((nen==1900)||(nen==2100)) continue; if ((nen & 3) == 0) ptintf("%d年は閏年\n",nen); } 年の制限をせずに、きっちり全部判断したいなら、質問者さんで工夫して下さい。