範囲内の桁数
0から9までの整数dがあるとすると、下限と上限としてそれぞれ下限と上限の2つの正の整数もあります。下限と上限を含む、下限と上限の間のすべての整数でdが数字として出現する回数を見つける必要があります。
したがって、入力がd =1、low =1、high =13の場合、桁d =1は1,10,11,12,13のように6回発生するため、出力は6になります。
これを解決するには、次の手順に従います-
関数zero()を定義します。これにはnが必要です。
-
ret:=0、x:=0
-
nが0と同じ場合、-
-
1を返す
-
-
初期化m:=1の場合、m <=nの場合、更新m:=m * 10、do −
-
a:=n / m
-
b:=n mod m
-
z:=mod 10
-
mの桁数がnの桁数と同じである場合、-
-
ループから出てきます
-
-
z> xの場合、-
-
ret:=ret +((a / 10)+ 1)
-
-
それ以外の場合、zがxと同じである場合、
-
ret:=ret +((a / 10)* m +(b + 1))
-
-
それ以外の場合
-
ret:=ret +(a / 10)
-
-
-
retを返す
-
関数f()を定義します。これには、x、n、
が必要です。 -
ret:=0
-
初期化m:=1の場合、m <=nの場合、更新m:=m * 10、do −
-
a:=n / m
-
b:=n mod m
-
z:=mod 10
-
z> xの場合、
-
ret:=ret +((a / 10)+ 1)
-
-
それ以外の場合、zがxと同じである場合、-
-
ret:=ret +((a / 10)* m +(b + 1))
-
-
それ以外の場合
-
ret:=ret +(a / 10)
-
-
xが0と同じ場合、-
-
ret:=ret --m
-
-
-
retを返す
-
メインの方法から次のようにします
-
retを返す
-
f(d、high-f(d、low-1))を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int digitCount(int x){ int ret = 0; while (x) { ret++; x /= 10; } return ret; } int zero(int n){ int ret = 0; int x = 0; if (n == 0) return 1; for (int m = 1; m <= n; m *= 10) { int a = n / m; int b = n % m; int z = a % 10; if (digitCount(m) == digitCount(n)) break; if (z > x) { ret += ((a / 10) + 1) * m; } else if (z == x) { ret += (a / 10) * m + (b + 1); } else { ret += (a / 10) * m; } cout << ret << endl; } return ret; } int f(int x, int n){ int ret = 0; for (int m = 1; m <= n; m *= 10) { int a = n / m; int b = n % m; int z = a % 10; if (z > x) { ret += ((a / 10) + 1) * m; } else if (z == x) { ret += (a / 10) * m + (b + 1); } else { ret += (a / 10) * m; } if (x == 0) { ret -= m; } } return ret; } int digitsCount(int d, int low, int high){ return f(d, high) - f(d, low - 1); } }; main(){ Solution ob; cout << (ob.digitsCount(1,1,13)); }
入力
1,1,13
出力
6
-
Pythonは範囲内のセットビットをカウントしますか?
2進数に変換されたときに指定された正の数には、いくつかのセットビットがあります。 2進数のセットビットは1で表されます。この記事では、2進数に変換された後、特定の数値のセットビットの数を取得する方法を説明します。 ビンの使用とスライス 次の例では、数値を取得し、bin関数を適用してバイナリ値を取得します。次に、それをスライスして2進数に追加されたプレフィックスを削除し、範囲関数を適用してセットビットの数を取得します。 例 def SetBits_cnt(n, l, r): bin_val = bin(n) # Remove '0b
-
範囲内の未設定ビットをカウントするPythonプログラム。
正の数とビットの範囲が与えられます。私たちのタスクは、範囲内の未設定ビットをカウントすることです。 Input : n = 50, starting address = 2, ending address = 5 Output : 2 2〜5の範囲に「2」の未設定ビットがあります。 アルゴリズム Step 1 : convert n into its binary using bin(). Step 2 : remove first two characters. Step 3 : reverse string. Step 4 : count all unset bit 0 start