在C ++中计算二进制字符串中的偶数十进制值子字符串

我们仅给出了0和1的字符串。该字符串表示从左到右读取的二进制数。即001是4而不是1。目标是找到代表偶数十进制数字的所有子字符串。

我们将通过检查所有子字符串的第一个值来做到这一点,如果它是0,则number是偶数,即使1则number将是奇数。按长度-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',则表示所有从其开始的子字符串都将为十进制偶数。

  • 增量计数为长度-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