C++中计算二进制字符串中偶数十进制值子串的数量
我们得到一个仅包含 0 和 1 的字符串。该字符串表示从左到右读取的二进制数,例如 001 表示 4 而不是 1。目标是找到所有表示偶数十进制数的子串。
我们将通过检查所有子串的第一个值来做到这一点,如果它是 0,则数字为偶数;如果它是 1,则数字为奇数。将计数增加 length-i,因为所有以 sbstr[0]=’0’ 开头的子串在十进制中都将是偶数。
让我们通过示例来理解。
输入 − str=”101”
输出 − 二进制字符串中偶数十进制值子串的数量为 2
解释 − 可能的子串有:10、11、01、0、1,其中 01 是 2,0 是 0,共有 2 个偶数。
输入 − str=”111”
输出 − 二进制字符串中偶数十进制值子串的数量为 0
解释 − 可能的子串有 11、1,其中没有偶数。
下面程序中使用的算法如下
我们将一个字符串 str 作为只包含 0 和 1 的字符串。
将 str 的长度存储在 len=str.length() 中
函数 count_even(string str, int length) 获取字符串及其长度,并返回构成偶数十进制数的子串的数量。
使用 FOR 循环遍历字符串
从索引 i=0 到 i<len 开始,从左到右读取二进制数。
如果任何 str[i]==’0’,则表示所有从此开始的子串在十进制中都是偶数。
将计数增加 length-i。
返回计数作为结果。
示例
#include <bits/stdc++.h> using namespace std; int count_even(string str, int length){ int count = 0; for (int i = 0; i < length; i++){ if (str[i] == '0'){ count += (length - i); } } return count; } int main(){ string str = "00111"; int len = str.length(); cout<<"Count of even decimal value substrings in a binary string are: "<<count_even(str, len) << endl; return 0; }
输出
如果我们运行上面的代码,它将生成以下输出:
Count of even decimal value substrings in a binary string are: 9
广告