Sweety

Practice makes perfect

导航

经典递归

Posted on 2015-01-25 15:33  蓝空  阅读(134)  评论(0编辑  收藏  举报
蓝桥网:


  算法训练 2的次幂表示  :http://lx.lanqiao.org/problem.page?gpid=T235

应该算是比较经典的递归了,直接调用递归函数即可,比较有意思


具体思路,将数变为二进制字符串,遍历每一位的字符,若为1则递归输出其位数,由于输出中只有2、2(0)、2(2)以及更高次幂四种情况,因此分四种即可

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>  
#include <iostream>
using namespace std;
void fun(int bit){
	char s[20];
	if(bit>2){
	  itoa(bit, s, 2);   //转换成字符串,进制基数为2,i转化为   注意是整型和字符数组之间的转化 
       int len = strlen(s);
       int mark=0;  //标记是否输出+号,因为开始的时候是没有加号的 
       for(int i=0;i<len;i++){
       	 
	   if(s[i]!='0'){
		  if(mark==1)
             cout<<'+';
          cout<<2;
           
		  if(len-i-1!=1)  //控制()是否输出,如果等于1的话就不输出,因为2的1次方直接输出2就可以了 
		  cout<<'(';
		  
		  fun(len-i-1);	
		  mark=1;
		  
		  
		  if(len-i-1!=1)
		  cout<<')';
          } 
       }
       return ;
	}
	if(bit==2){
		cout<<"2";
		return ;
	}
	if(bit==1){
		cout<<"";
		return ;
	}
	if(bit==0){
		cout<<"0";
		return ;
	}
}


int main()
{
   int n;
   cin>>n;
   	fun(n);			
return 0;
}


下面代码稍微长一点,但是好像理解起来简单点

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cstring>
#include <algorithm>  
#include <iostream>
using namespace std;
void fun(int bit){
	char s[20];
	if(bit>7){
	  itoa(bit, s, 2);   //转换成字符串,进制基数为2,i转化为   注意是整型和字符数组之间的转化 
       int len = strlen(s);
       int mark=0;  //标记是否输出+号,因为开始的时候是没有加号的 
       for(int i=0;i<len;i++){	 
	    if(s[i]!='0'){
		  if(mark==1)
             cout<<'+';
          cout<<2;
          if(len-i-1!=1)
		  cout<<'(';		  
		  fun(len-i-1);	
		  mark=1;
		  if(len-i-1!=1)
		  cout<<')';
          } 
       }
       return ;
	}
	if(bit==7){
		cout<<"2(2)+2+2(0)";
		return ;
	}
	if(bit==6){
		cout<<"2(2)+2";
		return ;
	}
	if(bit==5){
		cout<<"2(2)+2(0)";
		return ;
	}
	if(bit==4){
		cout<<"2(2)";
		return ;
	}
	if(bit==3){
		cout<<"2+2(0)";
		return ;
	}
	if(bit==2){
		cout<<"2";
		return ;
	}
	if(bit==1){
		cout<<"";
		return ;
	}
	if(bit==0){
		cout<<"0";
		return ;
	}
}


int main()
{
   int n;
   cin>>n;
   	fun(n);			
return 0;
}