无穷字符串

 

 

 

 

 

 

 

 

 

typedef unsigned long long LL ;
map < int , LL > fibo ;
map < int , LL > ::iterator it ;

LL my_pow(LL x , LL y){
   LL ans = 1 ;
   for(; y; y>>=1 ){
      if(y&1)
         ans *= x ;
      x*=x ;
   }
   return ans ;
}

void init(){
     fibo.clear() ;
     LL x1 = 4 ;
     LL x2 = 3 ;
     fibo[1] =  4  ;
     fibo[2] =  3  ;
     int id = 3 ;
     while(x1 + x2 <= my_pow(2,63)){
         fibo[id] = x1+ x2 ;
         id++ ;
         LL temp = x2 ;
         x2 = x1 + x2 ;
         x1 = temp ;
     }
     fibo[id] = x1+ x2  ;
}

char dfs(int id , LL n){
     if(n <= 7){
         switch(n){
            case 1 :
              return 'T' ;
            case 2 :
              return '.' ;
            case 3 :
              return 'T' ;
            case 4 :
              return '^' ;
            case 5 :
              return '_' ;
            case 6 :
              return '_' ;
            case 7 :
              return '^'  ;
         }
     }
     LL x = fibo[id-1] ;
     if(x < n)
        return dfs(id - 2 , n - x) ;
     else
        return dfs(id - 1 , n ) ;
}

char  gao(LL n){
     init() ;
     int id  ;
     for(it = fibo.begin() ; it != fibo.end() ; it++){
          if(it->second  >= n){
               id = it->first ;
               break ;
          }
     }
     return dfs(id , n) ;
}

  

 

 

转载于:https://www.cnblogs.com/liyangtianmen/p/3584622.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值