SYCOJ4972的幂次方

题目— 2的幂次方 (shiyancang.cn)

递归题

#include<bits/stdc++.h>
using namespace std;
int k;
void f(int n,int step)
{
	if(n==0) return;
	f(n/2,step+1);
	if(n%2==1)
	{
		if(n/2!=0)
		{
			printf("+"); //不为0,说明化到最简,回退,然后开始加,重点再回溯。 
		 } 
		if(step==1)
		{
			printf("2");//当只剩下一步的时候,设置2。 
		 } 
		else
		{
			printf("2(");
			if(step==0)
			{
				printf("0");
			}
			else
			{
				f(step,0);//不断除以2,得到最终2的次方,然后当step=1;也就是剩下余数的时候,再回头把次方给解决掉,不断地2( 
			}
			printf(")");
		}
	}
}
int main()
{
	scanf("%d",&k);
	f(k,0);
	return 0;
 } 

  

posted @ 2021-07-13 23:40  mofan552  阅读(39)  评论(0)    收藏  举报