哈哈嗨(发癫

刹那(。・∀・)ノ゙  •  1年前


有两个解法

#include <iostream>

using namespace std;

int bin[20], m;

void my_power(int n) 
{
	int i;
	int flag = 0;
	while (n) 
	{
		for (i = m; i >= 0; i--) 
		{
			if (bin[i] <= n) 
			{
				n = n - bin[i];	
				if (flag == 0) 
					flag = 1;
				else 
					printf("+");
				if (i > 1) 
				{
					printf("2(");
					my_power(i);
					printf(")");
				}
				if (i == 1)
					printf("2");
				if (i == 0)
					printf("2(0)");
			}
		}
	}
}

int main() 
{
	int n, i, j;
	cin>>n;
	m = 0;
	bin[0] = 1;
	while (bin[m] < n) 
	{
		m++;
		bin[m] = bin[m - 1] * 2;
	}
	my_power(n);
	return 0;
}

↑这是递归的

下面这个是不完整代码

#include <bits/stdc++.h> 

using namespace std;

const int N=1e4+10;
int ans[N];
int top=0;

int main ()
{
	int num;
	cin>>num;
	int step=0,a;	
	while(num)
	{
		step=0;
		for(int j=1;j<=num;j=j*2)
		{
			if(j*2>num)
			{
				a=j;
				break;
			}
			step++;
		}
		num=num-a;
		ans[top++]=step;
	}
	for(int i=0;i<top-1;i++)
	{
		cout<<"2("<<ans[i]<<")+";
	}
	cout<<"2("<<ans[top-1]<<")";
	return 0;
}

注意

这个代码只实现了最初的拆分,并不能拆分指数部分

仅供参考,自取


评论:

请先登录,才能进行评论