详解见:http://blog.csdn.net/tri_integral/article/details/18666797
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<cstdio> #include<cstring> #define maxn 105 #include<algorithm> using namespace std; int s[maxn]; int main() { int n; int tmp; while(scanf("%d",&n)!=EOF) { memset(s,0,sizeof s); s[50]=n; bool flag; while(1) { flag=0; for(int i=103;i>=0;i--) { if(s[i]>1) { s[i-1]+=s[i]/2; s[i+2]+=s[i]/2; s[i]%=2; flag=1; } } for(int i=104;i>=0;i--) { if(s[i]&&s[i-1]) { tmp=min(s[i],s[i-1]); s[i-2]+=tmp; s[i]-=tmp; s[i-1]-=tmp; flag=1; } } if(flag==0)break; } int head,tail; for(int i=0;i<105;i++) if(s[i]!=0) { head=i; break; } for(int i=104;i>=0;i--) { if(s[i]!=0) { tail=i; break; } } for(int i=head;i<=tail;i++) { printf("%d",s[i]); if(i==50&&tail>50)putchar('.'); } puts(""); } return 0; }