似乎是高精度减法乱码了。
#include<bits/stdc++.h>
#define str string
using namespace std;
str s,ans="0";
int l,f=1;
inline void add(){
int k=0;
for(int i=f-1;i>=0;--i){
if(ans[i]-'0'+1+k>=10){
k=1;
ans[i]=(ans[i]-'0'+1+k)%10+ans[i];
} else{
ans[i]+=1+k;
k=0;
break;
}
}
if(k)
ans=' '+ans,f++,ans[0]=k+'0';
return;
}
inline void az(str b){
for(int i=0;i<l;++i){
if(b[i]-s[i]<0){
--b[i+1];
b[i]+=10;
}
s[i]=b[i]-s[i];
}
for(int i=l-1;i>=0;--i)
if(s[i]=='0'){
--l;
s[i]='\0';
} else
break;
return;
}
inline void work1(){
--s[l-1];
if(s[l-1]=='0')
s[--l]='\0';
}
inline void work2(){
str qaq="\0";
for(int i=1;i<=l;++i)
qaq+='0';
qaq+='1';
az(qaq);
}
inline void dfs(){
while(l){
if(s[l-1]<'5')
work1();
else if(s[l-1]>'5')
work2();
else{
bool p=1;
for(int i=l-2;i>=0;--i){
if(s[i]>'5'){
work2();
break;
} else if(s[i]<'5'){
work1();
break;
}
}
if(p)
work1();
}
add();
}
dfs();
}
int main(){
str qwq;
cin>>qwq;
l=qwq.size();
for(int i=l-1;i>=0;--i)
s+=qwq[i];
dfs();
for(int i=0;i<f;++i)
putchar(ans[i]);
return 0;
}