1. 程式人生 > >藍橋杯——二的次冪表示

藍橋杯——二的次冪表示

問題描述   任何一個正整數都可以用2進製表示,例如:137的2進製表示為10001001。
  將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表達式:137=2^7+2^3+2^0
  現在約定冪次用括號來表示,即a^b表示為a(b)
  此時,137可表示為:2(7)+2(3)+2(0)
  進一步:7=2^2+2+2^0 (2^1用2表示)
  3=2+2^0
  所以最後137可表示為:2(2(2)+2+2(0))+2(2+2(0))+2(0)
  又如:1315=2^10+2^8+2^5+2+1
  所以1315最後可表示為:
  2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 輸入格式   正整數(1<=n<=20000) 輸出格式   符合約定的n的0,2表示(在表示中不能有空格) 樣例輸入 137 樣例輸出 2(2(2)+2+2(0))+2(2+2(0))+2(0) 樣例輸入 1315 樣例輸出 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

提示
用遞迴實現會比較簡單,可以一邊遞迴一邊輸出

主要演算法:為了便於描述,以137為例。137的2進製表示為10001001.將2進位制資料存在陣列a中,即a[7]=1,a[6]=0,a[5]=0,.........a[0]=1.此時,a[i]對應於2(i).對於a[i]=1,如果i=0,輸出2(0)(或者+2(0)),如果i=1,輸出2(或者+2),如果i=2,輸出2(2)(或者+2(2)).其餘值,對i進行遞迴呼叫,即將i分解成0,2串。如果a[i]=0,忽略不處理。此外,用變數flag來控制是否輸出+.