有没有不带前导零的所有 N 位数和底数 B 的可能数?
我们在这里来看一个问题,我们有 N 和底数 B。我们的任务是计算所有不带前导 0 的 N 位底数 B 数。因此,如果 N 为 2,B 为 2,将有四个数字 00、01、10、11。因此,只有两个对本节有效。这些是 10、11,没有前导 0。
如果底数是 B,则有 0 到 B – 1 个不同的数字。因此,可以生成 BN 个不同的 N 位值(包括前导 0)。如果我们忽略第一位数字为 0,则会有 BN-1 个数字。因此,没有前导 0 的所有 N 位数字总数为 BN – BN-1
算法
countNDigitNum(N, B)
Begin total := BN with_zero := BN-1 return BN – BN-1 End
示例
#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
广告