Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int squares[10] = {0,1,4,9,16,25,36,49,64,81};
- int f( int n ){
- int result = 0;
- while( n ) {
- result += squares[ n%10 ];
- n /= 10;
- }
- return result;
- }
- int table[ 750 ];
- int fillTable( int n ){
- if( table[n] != 0 ) return table[n];
- table[n] = -1;
- int d;
- if( (d = fillTable( f(n) ) ) != -1 ) d++;
- return( table[n] = d );
- }
- inline void initTable(){
- for( int i = 0; i < 750; i++ ) table[ i ] = 0;
- table[ 1 ] = 1;
- for( int i = 2; i < 750; i++ ) fillTable( i );
- }
- char line[ 32 ];
- char wholeContent[ 12960000 ];
- char *p = wholeContent;
- inline int getFn(){
- int result = 0;
- while((*p < '0') || (*p >'9')) p++;
- while((*p >= '0')&&(*p<='9')) result += squares[ (*(p++))-'0' ];
- return result;
- }
- int main( int argc, char* argv[] ){
- initTable();
- int t,n;
- scanf( "%d\n",&t);
- fread_unlocked( wholeContent, 1, 12960000, stdin );
- while( t-- ){
- printf("%d\n", table[ getFn() ] );
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment