Ray Through Glasses

2014-11-23 22:08:35 来源: 作者: 浏览: 3
题意:给你一束光,问你在一个三层的平面类传递n次的种数;
仔细想下,就是一个fibonacci数列;
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
  
using namespace std ;  
  
vector Fibs ;  
void CalFibs()  
{  
    const int maxn = 10000 ;  
    int carry , i , j  , size1 , size2 , num1 , num2 ;  
    string add1 , add2 ;  
    add1 = '1' ;  
    add2 = '2' ;  
    Fibs.push_back( add1 ) ;  
    Fibs.push_back( add2 ) ;  
    for( int k = 3 ; k <= maxn ; ++k )  
    {  
        string sum ;  
        carry = 0 ;  
        i = j = 0 ;  
        size1 = add1.size() ;  
        size2 = add2.size() ;  
        while( i < size1 || j < size2 )  
        {  
            if( i < size1 )  
            {  
                num1 = add1[ i ] - '0' ;  
                ++i ;  
            }  
            else  
            {  
                num1 = 0 ;  
            }  
            if( j < size2 )  
            {  
                num2 = add2[ j ] - '0' ;  
                ++ j ;  
            }  
            else  
            {  
                num2 = 0 ;  
            }  
            num1 += ( num2 + carry ) ;  
            carry = num1 / 10 ;  
            num1 %= 10 ;  
            sum.push_back( num1 + '0' ) ;  
        }  
        if( carry )  
        {  
            sum.push_back( carry + '0' ) ;  
        }  
        Fibs.push_back( sum ) ;  
        add1 = add2 ;  
        add2 = sum ;  
    }  
}  
  
int main()  
{  
    CalFibs() ;  
    int n , i ;  
    string result ;  
    while( cin >> i )  
    {  
        i += 2 ;  
        result = Fibs[ i - 1 ] ;  
        for( i = result.size() - 1 ; i >= 0 ; --i )  
        {  
            cout << result[ i ] ;  
        }  
        cout << endl ;  
    }  
    return 0;  
}  

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: