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++と一緒に進めていきます。
今日は以上です。
ありがとうございました。