先頭ゼロを含まないN桁のB進数の個数を求める方法
本記事では、次のような問題を扱います。整数Nと基数Bが与えられたとき、先頭(最上位桁)が0ではないN桁のB進数が何通りあるかを数えます。例えば、N=2、B=2の場合、2桁の2進数は「00」「01」「10」「11」の4通り存在しますが、このうち先頭が0でない有効な数は「10」と「11」の2つだけです。
考え方
基数がBである場合、使用できる数字は0からB−1までのB種類です。したがって、先頭ゼロを含む場合、N桁の数は全部でBN通り生成できます。そのうち、先頭の桁が0になるものは、残りのN−1桁だけで決まるためBN−1通りあります。よって、先頭ゼロを含まないN桁のB進数の総数は、次の式で求められます。
BN − BN−1
アルゴリズム
countNDigitNum(N, B)
Begin total := BN with_zero := BN-1 return total - with_zero End
C++による実装例
#include <iostream>
#include <cmath>
using namespace std;
int countNDigitNum(int N, int B) {
int total = pow(B, N);
int with_zero = pow(B, N - 1);
return total - with_zero;
}
int main() {
int N = 5;
int B = 8;
cout << "Number of values: " << countNDigitNum(N, B);
}
実行結果
Number of values: 28672
N=5、B=8の場合、85 = 32768、84 = 4096 となるため、32768 − 4096 = 28672 という結果が得られます。このように、べき乗の差を計算するだけで、先頭ゼロを含まないN桁のB進数の個数を簡単に求められます。
-
文字列から1と2以外のすべての数字を削除するJavaプログラム
正規表現「(?<!\\d)数字(?!\\d)」は、指定された特定の数字に一致します。このパターンでは、後読みアサーション((?<!\\d))と先読みアサーション((?!\\d))を組み合わせており、対象の数字の直前・直後に別の数字が存在しない場合、つまり「単独の数字」であるときにのみマッチします。replaceAll()メソッドは、第1引数に正規表現パターン、第2引数に置換後の文字列を受け取るメソッドです。パターンに一致したすべての箇所が、指定された文字列に置き換えられます。したがって、文字列から1と2を除くすべての数字を削除するには、以下の手順で処理を行います。まず、正規表現を使
-
【Python入門】3つの数字を入力して全ての組み合わせ(順列)を表示する方法
ユーザーから入力を受け取った3つの数字について、すべての可能な組み合わせ(順列)を表示したい場合には、ネストされたループ(多重ループ)を使用します。以下に具体的な実装例を示します。サンプルコードfirst_num = int(input(最初の数字を入力してください...)) second_num = int(input(2番目の数字を入力してください...)) third_num = int(input(3番目の数字を入力してください...)) my_list = [] print(最初の数字は) print(first_num) print(2番目の数字は) print(second_nu