cpp``` #include<bits/stdc++.h> using namespace std; string s; string get(int x,int y){ string ans; for(int i=x;i<=y;i++){ ans=ans+s[i]; } return ans; } void add(string &k,int id){ if(id==-1){ k='1'+k; }else if(k[id]=='9'){ k[id]='0'; add(k,id-1); }else{ k[id]=k[id]+1; } } bool dfs(int id,string k){ add(k,k.size()-1); for(int i=0;i<k.size();i++,id++){ if(id==s.size()) return 1; if(k[i]!=s[id]){ return 0; } } if(id==s.size()) return 1; return dfs(id,k); } string Sub(string x,string y){ int a[205]={},b[205]={}; int len=x.size(),len1=y.size(); for(int i=1;i<=len;i++){ a[i]=int(x[len-i]-'0'); } for(int i=1;i<=len1;i++){ b[i]=int(y[len1-i]-'0'); } len=max(len,len1); for(int i=1;i<=len;i++){ a[i]-=b[i]; } for(int i=1;i<=len;i++){ if(a[i]<0){ a[i+1]--; a[i]+=10; } } while(a[len]==0) len--; string ans=""; for(int i=len;i>=1;i--) ans=ans+char(a[i]+'0'); return ans; } string Add(string x,string y){ int a[205]={},b[205]={}; int len=x.size(),len1=y.size(); for(int i=1;i<=len;i++){ a[i]=int(x[len-i]-'0'); } for(int i=1;i<=len1;i++){ b[i]=int(y[len1-i]-'0'); } len=max(len,len1); for(int i=1;i<=len;i++){ a[i]+=b[i]; if(a[i]>9){ a[i+1]+=a[i]/10; a[i]%=10; } } if(a[len+1]!=0) len++; string ans=""; for(int i=len;i>=1;i--) ans=ans+char(a[i]+'0'); return ans; } void jisuan(string s){ string k,ans="0"; while(s[0]=='0' && s.size()>1) s.erase(0,1); for(int i=1;i<=s.size()-1;i++){ k="9"; for(int j=2;j<=i;j++){ k=k+'0'; } for(int j=1;j<=i;j++){ ans=Add(ans,k); } } k=""; for(int i=1;i<=s.size()-1;i++) k=k+'9'; k=Add(k,"1"); k=Sub(s,k); for(int i=1;i<=s.size();i++){ ans=Add(ans,k); } ans=Add(ans,"1"); cout<<ans; exit(0); } int main(){ ios::sync_with_stdio(false); cout.tie(0); cin.tie(0); cin>>s; for(int i=1;i<=s.size();i++){ if(dfs(i,get(0,i-1))){ jisuan(get(0,i-1)); } } return 0; }