C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

桁の合計がNで、数値がC++でMで割り切れるゼロ以外の桁のみを持つ範囲間の数値の数


数値の範囲を定義するために、STARTとENDの2つの数値が提供されます。目標は、[START、END]の範囲内で、桁が0でなく、桁の合計が指定された数値Nに等しいすべての数値を見つけることです。数字はMで割り切れる

これを行うには、STARTからENDまで数値をトラバースし、数値ごとに、whileループを使用してその桁の合計をカウントします(すべての桁がゼロ以外の場合のみ)。この合計がNに等しく、数がMで割り切れる場合は、カウントをインクリメントします。

例を挙げて理解しましょう。

入力

START=1 END=100 N=9 M=6

出力

Numbers with digit sum N and divisible by M: 4

説明

Numbers 18, 36, 54, 72 have digit sum=9 and divisible by 6. None has 0 as a digit.

入力

START=100 END=200 N=10 M=2

出力

Numbers with digit sum N and divisible by M: 4

説明

Numbers 118, 136, 154, 172 have digit sum=10 and divisible by 2. None has 0 as a digit.

以下のプログラムで使用されているアプローチは次のとおりです

  • START、END、N、Mの整数を取ります。

  • 関数digitSum(int start、int end、int n、int m)は、digitsum =nで、mで割り切れ、すべてゼロ以外の数字を持つ数値の数を返します。

  • このような数値の場合、初期変数カウントを0とします。

  • 変数digsumを0とします

  • 変数フラグを0とします。

  • forループを使用して数値の範囲をトラバースします。 i=開始から終了

  • ここで、num =iごとに、num%m ==0(mで割り切れる)の場合は前に進みます。

  • whileループを使用して、数値が0より大きいかどうかを確認します。そして数字を見つけます。

  • 数字=num%10。桁がゼロ以外の場合は、digsum +=digitを計算します。 num =num / 10を減らして、次の桁を追加します。いずれかの桁が0の場合、flag =0を設定し、whileループを中断します

  • しばらくして、(digsum==nおよびflag==1)かどうかを確認します。真のインクリメントカウントの場合。

  • 次に、iをmずつインクリメントします(mの倍数)。

  • すべてのループの終わりに、カウントは条件を満たす総数になります。

  • 結果としてカウントを返します。

#include <bits/stdc++.h>
using namespace std;
int digitSum(int start, int end, int n, int m){
   int count = 0;
   int digsum = 0;
   int flag=0;
   for (int i = start; i <= end; i++){
      int num=i;
      digsum=0;
      flag=0;
      if(num%m==0){
         while(num>0){
            int digit=num%10;
            if(digit==0){
               flag=0;
               break;
            }
            digsum+=num%10; //sum of digits
            num=num/10;
            flag=1;
         }
         if(digsum==n && flag==1) //original number is i {
            count++;
            cout<<i<<" ";
         }
         i+=m; //now increment in multiples of m
         i--; // for loop has i++
      }
   }
   return count;
}
int main(){
   int START = 1;
   int END = 100;
   int N = 9;
   int M = 6;
   cout <<"Numbers with digit sum N and divisible by M: "<<digitSum(START,END,N, M);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Numbers with digit sum N and divisible by M: 4

  1. C++でのみ3と8の数字の数値に変換します

    このチュートリアルでは、数値を3桁と8桁のみに変換するプログラムについて説明します。 このために、乱数が提供されます。私たちの仕事は、数字から1を足したり引いたりするか、数字の数字を任意の数字に変換することによって、その数字を3と8だけに変換することです。 例 #include <bits/stdc++.h> using namespace std; //calculating minimum operations required int cal_min(long long int num){    //calculating remainder and o

  2. 数字が7のみで、C++で合計が与えられた最小数

    問題の説明 ラッキーナンバーは、小数表現にラッキー数字4と7のみが含まれる正の整数です。タスクは、数字の合計がnに等しい最小のラッキーナンバーを見つけることです。 例 合計=22の場合、ラッキーナンバーは4 + 4 + 7 + 7=22として4477です アルゴリズム 1. If sum is multiple of 4, then result has all 4s. 2. If sum is multiple of 7, then result has all 7s. 3. If sum is not multiple of 4 or 7, then we can subtract