对于一串二进制。
若当前的值的情况是010,那么直接+1;
若当前值的情况是01...1(1的个数大于等于2)0,那么相当于最后一位变为1,然后减去第一个1;
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define maxn 2000010
int maps[501][501];
int xx[5]={1,0,-1,0};
int yy[5]={0,-1,0,1};
int sum[maxn];
int num[maxn];
void init()
{
}
char str[maxn];
int main()
{
int n,i,t;
while(~scanf("%s",str))
{
int len=strlen(str);
for(i=len;i>=1;i--)
{
num[i]=str[i-1]-'0';
}
int leap=0;
int ms;
ms=0;
num[0]=0;
for(i=len;i>=0;i--)
{
if(num[i]==0)
{
if(leap!=0)
{
if(i==0)
{
ms++;
continue;
}
num[i]=1;
leap=0;
i++;
}
}
else
{
if(leap==0)
{
if(num[i-1]==1)
{
leap=1;
ms++;
}
else
{
ms++;
leap=0;
}
}
}
}
if(num[0]==1)ms++;
cout<<ms<<endl;
}
return 0;
}