Fibinary Numbers

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=30506#problem/V

题意:从右向左,每一个位数,分别表示一个fibonacci数,1表示有,0表示没有;求两个数的和,同样按照这种形式存储

 

#include<map>

#include<set>

#include<list>

#include<cmath>

#include<ctime>

#include<deque>

#include<stack>

#include<bitset>

#include<cstdio>

#include<vector>

#include<cstdlib>

#include<cstring>

#include<iomanip>

#include<numeric>

#include<sstream>

#include<utility>

#include<iostream>

#include<algorithm>

#include<functional>



using namespace std ;

const int maxn = 110 ;

char f1[ maxn + 10 ] , f2[ maxn + 10] , f[ maxn + 10 ] ;



void Swap( char a[ ] )

{

	int len = strlen( a ) ;

	char temp ;

	for( int i = 0 ; i < len / 2 ; ++ i )

	{

		temp = a[ i ] ;

		a[ i ] = a[ len - i - 1 ] ;

		a[ len - i - 1 ] = temp ;

	}

}



int main()

{

	int Case = 0 ;

	while( scanf( "%s%s" , f1 , f2 ) != EOF )

	{

		int len1 = strlen( f1 ) ;

		int len2 = strlen( f2 ) ;

		int len = len1 > len2 ? len1 : len2 ;

		Swap( f1 ) ;

		Swap( f2 ) ;

		Case++ ;

		if( Case != 1 )

		{

			printf( "\n" ) ;

		}

		memset( f , '0' , sizeof( f ) ) ;

		for( int i = len1 ; i < maxn + 10 ; ++i )

		{

			f1[ i ] = '0' ;

		}

		for( int j = len2 ; j < maxn + 10; ++j )

		{

			f2[ j ] = '0' ;

		}

		for( int i = 0 ; i < len ; ++i )

		{

			f[ i ] = f1[ i ] + f2[ i ] - '0' ;

		}

		for( int i = 0 ; i < maxn ; ++i )

		{

			if( f[ i ] == '2' )

			{

				f[ i + 1 ] ++ ;

				f[ i ] = '0' ;

				if( i == 1 )

				{

					f[ i - 1 ]++ ;

					i -= 2 ;

				}

				else if( i > 1 )

				{

					f[ i - 2 ]++ ;

					i -= 3 ;

				}

			}

		}

		for( int i = maxn ; i >= 1 ; --i )

		{

			if( f[ i ] == '1' && f[ i - 1 ] == '1' )

			{

				f[ i ] = '0' ;

				f[ i - 1 ] = '0' ;

				f[ ++i ]++ ;			

				i += 2 ;

			}

		}

		int i ;

		for( i = maxn ; i >=  0 && f[ i ] == '0' ; --i );

		{

			if( i == -1 )

			{

				printf( "0" ) ;

			}

			else

			{

				for( ; i >= 0 ; -- i )

				{

					printf( "%c" , f[ i ] ) ;

				}

				

			}

			printf( "\n" ) ;

		}

	}

    return 0;

}


 

 

你可能感兴趣的:(number)