#include <cstdio> #include <cmath> using namespace std; void dg(int n) { int a; if(n==0) return; for(int i=0;i<=15;i++) //求出n以內2最大的a次方 { a=i; if(pow(2... ...
#include <cstdio> #include <cmath> using namespace std; void dg(int n) { int a; if(n==0) return; for(int i=0;i<=15;i++) //求出n以內2最大的a次方 { a=i; if(pow(2,a)>n) { a--; break; } } if(a==0) printf("2(0)"); if(a==1) printf("2"); if(a>1) //當a大於1時進行遞歸 { printf("2("); dg(a); //使a次方用2的冪次方表示 printf(")"); } if(n!=pow(2,a)) //使減去最大2的a次方剩下的數用2的冪次方表示 { putchar('+'); dg(n-pow(2,a)); } } int main() { int n; scanf("%d",&n); dg(n); putchar('\n'); return 0; }