もどくんちゃんねる ガジェット部

自転車、ガジェット、映像制作、CG、Blender など

【C++(C言語)】1 以上 N 以下の整数のうち、10 進法での各桁の和が A 以上 B 以下であるものの総和を求めてください。

今日はこの問題を解いていきます。

目次

 

問題

 以上 N 以下の整数のうち、10 進法での各桁の和が A 以上 B 以下であるものの総和を求めてください。

 

入力例

10 1 2

出力

13

 

問題が少しわかりにくいですが、10、1、2を入力した場合

10,9,8,7,6,5,4,3,2,1

とあり、

1+0,9,8,7,6,5,4,3,2,1

となるため、1以上2以下を満たすのは

1+0,2,1

となります。その元の数は

10,2,1

のためこれらの総和は13になるというわけです。

 

答え

#include <iostream>
using namespace std;

int main(){
   
    int A,B;
    int N;
    int tmp; //一時置き場
    int SUM=0;
    int NUM=0; //各桁の合計


    cin >> N;
    cin >> A >> B;


    for(int i=N ; i>0; i--){
        tmp = i;
        NUM =0;
        while(tmp>=1){
            NUM = NUM + tmp % 10;
            tmp = tmp /10;
        }

        if(NUM>=A && NUM <=B){
            SUM = SUM + i;
      }
    }

    cout << SUM <<endl;

}

 

C言語の場合、

cin をscanf

cout をprintfに読み替えてください。

 

【解説】

簡単に解説を書いてみました。もし需要があればもっと詳しい解説するので、必要な形はコメント欄で教えてください。
 
以上です。