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

C++で整数nで割り切れるm桁の整数の数


2つの整数mとnが与えられます。目標は、nで割り切れるm桁の数字を数えることです。

m =1の場合、数値は0、1、2、3、4、5、6、7、8、9であり、n =3の場合、数値は3 =0、3、6、9カウント=4で割り切れます。

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

入力 − m =2、n =9

出力 − n −10で割り切れるm桁の数字の数

説明 − 9で割り切れる10から99の数は−

18, 27, 36, 45, 54, 63, 72, 81, 90, 99

入力 m =3、n =300

出力 − nで割り切れるm桁の数字の数:3

説明 −300で割り切れる100から999の数は-

300, 600, 900

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

  • 整数mとnを取ります。

  • 最大のm-1桁の数字をnum1として計算します

  • 最大のm桁の数字をnum2として計算します

  • 関数findCount(int n、int L、int R)は、nと範囲(num1とnum2の間)を入力として受け取り、nで割り切れるその範囲内のすべての数値を返します。

  • 初期カウントを0とします。

  • i=Lからi=Rまで。 i%n ==0の場合、カウントをインクリメントします。

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

#include<bits/stdc++.h>
using namespace std;
// Returns count of m digit numbers having n
// as divisor
int findCount(int n, int L, int R){
   int count=0;
   int i;
   for(int i=L;i<=R;i++){
      if(i%n==0)
         { count++; }
   }
   return count;
}
int main(){
   int M = 2, N = 9;
   int i;
   int num1 = 0; //largest m-1 digit no.
   for (i = 0; i < (M - 1); i++)
      num1 = (num1 * 10) + 9;
   int num2 = 0; //largest m digit no.
   for (i = 0; i < M; i++)
      num2 = (num2 * 10) + 9;
   cout<<"Count of M digit no.s divisible by N:"<<findCount(N,num1+1,num2);
   return 0;
}

出力

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

Count of M digit no.s divisible by N:11

  1. C++で少なくとも互いに割り切れる配列要素を出力します

    この問題では、整数の配列が与えられ、配列の他の少なくとも1つの要素で割り切れる数だけを出力する必要があります。 概念をよりよく理解するために例を見てみましょう。 Input : 3 12 16 21 Output : 12 21 説明 − 3は最小であるため、他の数値で割り切れる可能性があります。12は3で割り切れ、16は3で割り切れず、21は3で割り切れます。したがって、3と16は無視します。 簡単な方法の1つは、すべての要素が配列の他の要素で割り切れるかどうかを確認することです。しかし、これは問題に対する最善の解決策ではありません。 ハッシュの使用 より良い解決策になる可能性があ

  2. C++を使用してすべての要素が割り切れるような配列要素を見つけます

    要素が少ない配列Aがあるとします。すべての要素をそれで分割できるように、Aから要素を見つける必要があります。 Aが[15、21、69、33、3、72、81]のようであるとすると、すべての数値は3で割り切れる可能性があるため、要素は3になります。 この問題を解決するために、Aの最小の数値を取得し、すべての数値を最小の数値で除算できるかどうかを確認します。はいの場合は数値を返し、そうでない場合はfalseを返します。 例 #include<iostream> #include<algorithm> using namespace std; int getNumber(in