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

C++で1からNまでの合計桁数をカウントします


入力として数値Nが与えられます。目標は、数字の1からNまでの合計桁数を数えることです。1から9の数字はそれぞれ1桁、11から99はそれぞれ2桁、100から999はそれぞれ3桁というようになります。

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

入力 − n =11

出力 −1からNまでの合計桁数は次のとおりです。13

説明 − 1から9までの数字はそれぞれ1桁です:9桁10、11はそれぞれ2桁です。 4桁。合計桁数=9+ 4=13。

入力 − n =999

出力 − 1からNまでの合計桁数のカウントは次のとおりです:2889

説明 − 1から9までの数字はそれぞれ1桁です:9桁10から99まではそれぞれ2桁です。 :180桁。 100〜999はそれぞれ3桁です:2700桁合計桁数=2700 + 180 + 9=2889桁

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

2つのアプローチを使用します。再帰関数を使用して数値numの桁を計算する最初の単純なアプローチ。渡されたnumを文字列に変換します。文字列の長さは数字の数字です。現在のnum-1を再帰的にバイパスする番号ごとにこれを実行します。

  • 数値を正の整数とします。

  • 関数total_digits(int num)はnumを取り、1からnumまでの数字の数字を返します。

  • numの数字を計算するには、numを文字列に変換します。 (to_string(num))。

  • 文字列の長さは数字の数字です。

  • numが1の場合、1を返します。それ以外の場合は、num未満の残りの数値に対してlength + total_digits(num-1)を返します。

  • 最終的に、結果として合計桁数が取得されます。

効率的なアプローチ

このアプローチでは、Nまでの数値ごとに10、100、1000をトラバースするロジックを使用します。10iごとに、桁数は(num-i + 1)です。

  • 数値を正の整数とします。

  • 関数total_digits(int num)はnumを取り、1からnumまでの数字の数字を返します。

  • 最初は合計数を0とします。

  • i=1をi<=numまでトラバースし、各反復でiを10ずつインクリメントし、カウントにnum-i+1を追加します。

  • 結果として、forループの最後のカウントを返します。

例(素朴なアプローチ)

#include <bits/stdc++.h>
using namespace std;
int total_digits(int num){
   string str = to_string(num);
   int length = str.length();
   if (num == 1){
      return 1;
   }
   return length + total_digits(num - 1);
}
int main(){
   int num = 20;
   cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num);
   return 0;
}

出力

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

Count of total number of digits from 1 to n are: 31

例(効率的なアプローチ)

#include <bits/stdc++.h>
using namespace std;
int total_digits(int num){
   int count = 0;
   for(int i = 1; i <= num; i *= 10){
      count = count + (num - i + 1);
   }
   return count;
}
int main(){
   int num = 20;
   cout<<"Count of total number of digits from 1 to n are: "<<total_digits(num);
   return 0;
}

出力

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

Count of total number of digits from 1 to n are: 31

  1. C ++で{0、1、2、3、4、5}の数字を持つn番目の数値

    数字{0、1、2、3、4、5}で形成された数字は 0、1、2、3、4、5、10、11、12、13、14、15、20、21、22、23、24、25など。 上記のシーケンスは、最初の6桁を使用して作成できます。数の形成の例を見てみましょう。 1 * 10 + 0 = 10 1 * 10 + 1 = 11 1 * 10 + 2 = 12 1 * 10 + 3 = 13 1 * 10 + 4 = 14 1 * 10 + 5 = 15 同様に、番号2、3、4、5を申請します。上記のパターンを使用して、2で次の6つの番号を取得します。そして3、その後4と5。 アルゴリズム 番号nを初期化します。

  2. C ++を使用してOpenCVのフレームの総数をカウントするにはどうすればよいですか?

    OpenCVでフレームの総数を計算する方法を学びます。 OpenCVを使用すると、ビデオのフレームの総数をカウントして表示するのが基本です。ただし、リアルタイムビデオフレームの総数をカウントできないことに注意する必要があります。リアルタイム動画には特定のフレーム数がないためです。 次のプログラムは、合計フレーム数をカウントし、コンソールウィンドウに表示します。 例 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { &