藍橋杯--演算法訓練 2的次冪表示
阿新 • • 發佈:2019-02-05
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
提示
用遞迴實現會比較簡單,可以一邊遞迴一邊輸出
思路:先把輸入的數轉化成二進位制並記錄1出現的次數與位置。使用遞迴求解.
遞迴出口:當1出現的位置為0時輸出2(0). 當1出現的位置為1時輸出2,當1出現的位置為2時輸出2(2);
其他情況則遞迴。
程式碼:
提示
用遞迴實現會比較簡單,可以一邊遞迴一邊輸出
思路:先把輸入的數轉化成二進位制並記錄1出現的次數與位置。使用遞迴求解.
遞迴出口:當1出現的位置為0時輸出2(0). 當1出現的位置為1時輸出2,當1出現的位置為2時輸出2(2);
其他情況則遞迴。
程式碼:
#include <iostream> using namespace std; void f(int n) { int i=0; int m=n; int t; int a[100]; int num=0; while(m) { t=m%2; m/=2; if(t!=0) a[num++]=i;//記錄在m所對應的二進位制中1出現的次數及相應的位置 i++; } for(int j=num-1;j>=0;j--) { if(a[j]==0) cout<<"2(0)"; if(a[j]==1) cout<<2; if(a[j]==2) cout<<"2(2)"; if(a[j]>2) { cout<<2<<'('; f(a[j]); cout<<')'; } if(j!=0) cout<<'+'; } } int main() { int n; cin>>n; f(n); return 0; }