1. 程式人生 > >藍橋杯--演算法訓練 2的次冪表示

藍橋杯--演算法訓練 2的次冪表示

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);
其他情況則遞迴。
程式碼:
#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;
}