欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

P1010 幂次方 二进制 递归

程序员文章站 2022-05-08 22:49:20
...
#include<bits/stdc++.h>
using namespace std;

void toBi(int n, int a[1000], int &f){	//把十进制数转化为二进制数 
	while(n){
		a[f++] = n%2;
		n /= 2;
	}
}

void fuc(int n){	//递归函数 
	if(n==1){	//等于1 return 相当于只输出2 
		return;
	}
		
	if(n==0){	//等于0 输出(0) 相当于输出 2(0) 
		cout<<"(0)";
		return;
	}
	
	cout<<"(";	//如果n没有等于0或1 证明会有一个式子, 所以在新一轮递归前后加括号 
	
	int a[1000], f = 0;		//新一轮递归 
	toBi(n, a, f);
	for(int i=f-1; i>=0; i--){
		if(!a[i])
			continue;
			
		if(i<f-1)
			cout<<"+";
			
		cout<<"2";
		fuc(i);
		cout<<"";		
	}
	
	cout<<")";
}


int main(){
	int n, a[1000] = {0}, cnt = 0;
	cin>>n;
	
	if(n==0){		//我也不知道会不会有n=0的情况,反正加上就对了 
		cout<<"0";
		return 0;
	}
	
	toBi(n, a, cnt);	//将十进制转化为2进制 

	for(int i=cnt-1; i>=0; i--){
		if(!a[i])	//剪掉不为1的位置 
			continue;	
			
		if(i<cnt-1)	//加号位置 
			cout<<"+";
			
		cout<<"2";
		fuc(i);
		cout<<"";
	}
	return 0;
} 
相关标签: 递归