二进制转字符串处理
原题:3998.变成1
刚开始路写窄了,没有考虑 11 + 1 的情况
错误算法:11 + 1 = 10
正确答案:11 + 1 = 100
十分奇怪的是,cout << s 会报limit错误(偶尔输出时会遇到)。
while(t){
if(s[t] == '1')
s[t] = '0';
else{
s[t] ='1';
break;
}
t--;
}
这段代码也很奇怪,循环条件改为t >= 0 就会出错。
最后解决办法:对二进制111直接特殊处理。
如果t == 0,就说明存在111…特殊情况。
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
int len = s.size();
int cnt = 0;
while(len != 1){
cnt ++;
if(s[len - 1] == '0')//偶数
{
s[len - 1] ='\0';
len--;
}
else{
//二进一
int t = len - 1;
while(t){
if(s[t] == '1')
s[t] = '0';
else{
s[t] ='1'; break;
}
t--;
}
if(t == 0){
cnt += len; break;
}
}
}
cout << cnt << endl;
}