zoukankan      html  css  js  c++  java
  • 经典递归

    蓝桥网:
    

      算法训练 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;
    }
    
    






  • 相关阅读:
    DDD~大话目录
    基于DDD的.NET开发框架-DDD经典分层
    补习知识:Entity Framework Code First属性映射约定
    一个官翻教程集合:ASP.NET Core 和 EF Core 系列教程
    补知识:EntityFramework Core映射关系详解
    关于this的问题
    promise
    js的类型转换
    不要在块内声明一个函数
    let和var
  • 原文地址:https://www.cnblogs.com/zswbky/p/5432021.html
Copyright © 2011-2022 走看看