一、题目描述
总时间限制: 1000ms 内存限制: 65536kB任何一个正整数都可以用2的幂次方表示。例如:
137=27+23+20
同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7=22+2+20(21用2表示)
3=2+20
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=210+28+25+2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
137
2(2(2)+2+2(0))+2(2+2(0))+2(0)
#includeint a[15]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384}; void csq(int n) { int f=0; for(int i=14;i>=0;i--){ if(n-a[i]>=0&&f==0){ f=1; if(i==0) printf("2(0)"); if(i==1) printf("2"); if(i==2) printf("2(2)"); if(i==3) printf("2(2+2(0))"); if(i==4) printf("2(2(2))"); if(i==5) printf("2(2(2)+2(0))"); if(i==6) printf("2(2(2)+2)"); if(i==7) printf("2(2(2)+2+2(0))"); if(i==8) printf("2(2(2+2(0)))"); if(i==9) printf("2(2(2+2(0))+2(0))"); if(i==10) printf("2(2(2+2(0))+2)"); if(i==11) printf("2(2(2+2(0))+2+2(0))"); if(i==12) printf("2(2(2+2(0))+2(2))"); if(i==13) printf("2(2(2+2(0))+2(2)+2(0))"); if(i==14) printf("2(2(2+2(0))+2(2)+2)"); n-=a[i]; } if(n-a[i]>=0&&f==1){ if(i==0) printf("+2(0)"); if(i==1) printf("+2"); if(i==2) printf("+2(2)"); if(i==3) printf("+2(2+2(0))"); if(i==4) printf("+2(2(2))"); if(i==5) printf("+2(2(2)+2(0))"); if(i==6) printf("+2(2(2)+2)"); if(i==7) printf("+2(2(2)+2+2(0))"); if(i==8) printf("+2(2(2+2(0)))"); if(i==9) printf("+2(2(2+2(0))+2(0))"); if(i==10) printf("+2(2(2+2(0))+2)"); if(i==11) printf("+2(2(2+2(0))+2+2(0))"); if(i==12) printf("+2(2(2+2(0))+2(2))"); if(i==13) printf("+2(2(2+2(0))+2(2)+2(0))"); if(i==14) printf("+2(2(2+2(0))+2(2)+2)"); n-=a[i]; } } } int main() { int n; scanf("%d",&n); csq(n); }