見出し画像

2024-07-30 C++プログラミング練習


どうも。ケロッグです。
すっかり前回の投稿から間が空いてしまいました。
今回は、Modern C++チャレンジ~C++プログラミング力を鍛える100問~ という問題集をやりました。
まだ独習C++は9章までしか終わってないのですが、飽きてきたので、息抜きにC++100問を進めることにしました。

今日は記念すべき1問目。

問題は「3または5で割り切れる正の整数の総和を求めよ」という簡単な数学の問題です。

私が書いたコードはこんな感じ。
思いついたままに書きました。

#include <iostream>


int sum(int limit){
  int result1=0;
  int result2=0;
  int result3=0;
  int result4=0;
  
  for(int i=0 ; i<=limit/3 ; i++){
    result1 += 3*i;
  }

   for(int j=0 ; j<=limit/5 ; j++){
    result2 += 5*j;
  }

    for(int k=0 ; k<=limit/15 ; k++){
    result3 += 15*k;
  }
  
  return  result4 = result1 + result2 - result3;
}

int main(){
  std::cout<<"荳企剞蛟、(豁」縺ョ謨エ謨ー)繧貞・蜉帙@縺ヲ縺上□縺輔>縲・<<std::endl;

  int num;
  std::cin>>num;

  std::cout<<"3縺セ縺溘・5縺ァ蜑イ繧雁・繧後k豁」縺ョ謨エ謨ー縺ョ邱丞柱縺ッ"<<sum(num)<<"縺ァ縺吶・<<std::endl;

(環境のせいで日本語が文字化けしてます)

これでも、期待通りの出力をしてくれました。
例えばこんな感じです。

//////////////////////////////////////////////////////////////////
上限値(正の整数)を入力してください。
100
3または5で割り切れる正の整数の総和は2309です。
//////////////////////////////////////////////////////////////////

しかし、答えはもっとスマートでした。
ここに載せはしませんが、要点だけ書きます。

・forループの中にif文で与えられた数を3または5で割ったときに、余りが0になる場合のみカウントしていく。
・上限値や合計値はunsignedを使用する。(正の整数であるため)

とても基本的なプログラムでしたが、それでも学びになることはありました。こんな感じでmodern C++100問も独習C++と一緒に進めていきます。

今日は以上です。
ありがとうございました。

いいなと思ったら応援しよう!