• ベストアンサー

うるう年を求めるプログラム

1900から2100年のうるう年を求めるプログラムが作りたいのですが どうしたらよいでしょうか? forを使って1900から2100までかぞえる。 4で割り切れるものは閏年 しかし100で割り切れるものは閏年でない。 400で割り切れるものは閏年である。 最後の条件の分岐から閏年のみを表示させたいのですがわかりません 。

質問者が選んだベストアンサー

  • ベストアンサー
  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.4

int uruu; int year; for(year = 1900; year <= 2100; year++) {  if(year % 4 == 0) {   // 4で割り切れる   if(year % 100 == 0) {    // 100で割り切れる    if(year % 400 == 0) {     // 400で割り切れる = 閏年     uruu = 1;    } else {     // 400で割り切れない = 閏年では無い     uruu= 0;    }   } else {    // 100で割り切れない = 閏年    uruu = 1;   }  } else {   // 4で割り切れない = 閏年ではない   uruu = 0;  }  if(uruu == 1) {   // 閏年のときの処理  } else {   // 閏年ではないときの処理  } } 規則どおりに書くのならこうなるね。 改良の余地はあるかもしれないけど。

santye
質問者

お礼

細かく教えていただきありがとうございます。 参考にさせてもらいます。

その他の回答 (4)

  • nebel
  • ベストアンサー率37% (117/308)
回答No.5

/* 閏年判定関数    引数に西暦を渡し、閏年なら1を閏年でなければ0を返す*/ int leapyear( int year ){ return (((year%4==0) && (year%100!=0) || (year%400==0)) ? 1 : 0); } int main(){ int i; for(i=1900;i<=2100;i+=4){ if( leapyear(i) ){ print("%d\n",i); } } leapyear関数自体は汎用。 main内のループは、1900から2100までの閏年ってのに合わせてある。

  • qtea
  • ベストアンサー率77% (38/49)
回答No.3

かなり、手を抜くなら… 1900から2100の間で ・4で割り切れる ・100で割り切れる ・400で割り切れない ものは、1900と2100だけなんですよね。 なので、1904から4づつ足していったものを表示するだけで良いような… で、2096以下になったら、ループを抜ける、と。

santye
質問者

お礼

そういえばそうですね、気付きませんでした。 回答ありがとうございます。

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

誤魔化して書くなら、こう。 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); } 年の制限をせずに、きっちり全部判断したいなら、質問者さんで工夫して下さい。

noname#25358
noname#25358
回答No.1

 4で割り切れるかどうかを調べるには、割余演算子を使います。  C言語の場合、% 演算子です。  if ( nen % 4 = 0 ) {   // 4で割り切れる  }  こんな感じ。他の条件も一緒です。

関連するQ&A