//這個遞迴挺難得,湊合看懂
任何乙個正整數都可以用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表示(在表示中不能有空格)
樣例輸入?
1
137
樣例輸出?
1
2(2(2)+2+2(0))+2(2+2(0))+2(0)
樣例輸入?
1
1315
樣例輸出?
1
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示用遞迴實現會比較簡單,可以一邊遞迴一邊輸出。
解題思路
基本演算法是數轉二進位制,使用求餘+除法迴圈計算。題目提示了遞迴,但是一下遞迴不容易寫對而且不好除錯,可以一步步來,先寫成某個數的次方和,除錯正確後再對次方遞迴解析。
遞迴時,上一次計算的次方成為新的數,應該注意這個數為0和為2時的特殊情況。
乙個數被分解後,成為剩餘的數+2的次方,這兩個數其中之一都可能為0,應該注意只有這兩個數都非零時才輸出'+'號
#include#include#include#include#include#includeusing namespace std;
void put(int num,int n)
}}int main()
藍橋杯 演算法訓練 2的次冪表示(遞迴演算法)
問題描述 任何乙個正整數都可以用2進製表示,例如 137的2進製表示為10001001。將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表示式 137 2 7 2 3 2 0 現在約定冪次用括號來表示,即a b表示為a b 此時,137可表示為 2 7 2 3 2 0 進一步 ...
藍橋杯 演算法訓練 2的次冪表示
問題描述 任何乙個正整數都可以用2進製表示,例如 137的2進製表示為10001001。將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表示式 137 2 7 2 3 2 0 現在約定冪次用括號來表示,即a b表示為a b 此時,137可表示為 2 7 2 3 2 0 進一步 ...
藍橋杯 演算法訓練 2的次冪表示
問題描述 任何乙個正整數都可以用2進製表示,例如 137的2進製表示為10001001。將這種2進製表示寫成2的次冪的和的形式,令次冪高的排在前面,可得到如下表示式 137 2 7 2 3 2 0 現在約定冪次用括號來表示,即a b表示為a b 此時,137可表示為 2 7 2 3 2 0 進一步 ...