网站:https://app.codility.com/programmers/lessons/1-iterations/binary_gap/
题目:
程序:
#include<iostream> #include<vector> using namespace std; int solution(int N) { if(N>0){ unsigned length=0;//0的个数计数 int n=N; vector<int> v;//保存二进制,例如n=11,二进制为1011,v为1101(也就是说v的begin为低位,end为高位,刚好倒置) vector<int> length_v;//保存0的长度,最后返回容器中的最大值;(容器也可能最后为空,例如二进制为1111时) while (n>0) { if(n%2 ==1) v.push_back(1); else v.push_back(0); n=n/2; } auto it=v.end()-1; /* //输出二进制; cout<<"输出二进制数:"; while (it != v.begin()) { cout<<*it<<" "; it--; } cout << *v.begin() << " "; cout<<endl; */ //数0的个数 it=v.begin(); int flag=0;//flag=1时代表开始数0; length = 0; while (it != v.end()) { if (*it == 1) { if(flag==0) flag=1; else if(flag==1){ if(length!=0) length_v.push_back(length); length=0;} } else if(*it==0 && flag==1) length++; it++; } //输出0最大的长度 if(length_v.empty()) return 0;// it=length_v.begin(); int max=*it; while (it != length_v.end()) { if (*it>max) max=*it; cout<<"长度等于="<<*it<<endl; it++; } return max; } else return 0; } void main() { cout<<"max="<<solution(15)<<endl; getchar(); }