--- title: "变成1" created: 2025-11-28 tags: - 算法 --- # 变成1 ## 题目 [变成1](https://www.acwing.com/problem/content/description/4001/) ![[image-82fb141b.png]] ## 思路分析 位数不超过10^6 说明是高精度问题 还是一样 用容器进行模拟 string读入 逆序存储 如何判断是奇数偶数 其实就是取出最低位(最右) 也就是容器里的第一个元素 判断它是0还是1 若为奇数 就得进行加法 对于二进制的高精度加法 实质与十进制一样 只要修改%10 /10 为%2 /2即可 ![[image-5e49289d.png]] 在原本的模板基础上 发现第二个加数可以不要 因为只有第一次计算时为1 其他时候都为0 那我不妨将t初始化成1 直接省去第二个加数 然后发现 二进制的加1 实际上就是将后面的连续的1变成0 然后最后一个0变成1 也就是只有当t=1的时候才要进行翻转 当t=0时 前面的位数都可以保持不变 那不妨直接在原容器里面进行修改 而不是重新拷贝一份结果 那么就得到 ```cpp for(int i=0;i using namespace std; int n; deque q; string s; int main() { cin>>s; for(int i=s.size()-1;i>=0;i--) q.push_back(s[i]-'0'); int cnt=0; while(q.size()>1) { int lowbit=q.front(); if(lowbit%2) { int t=1; for(int i=0;i