usaco Palindromic Squares 解题报告

来源:互联网 发布:英语语音识别软件 编辑:程序博客网 时间:2024/06/05 21:15
题意:

回文数是指从左向右念和从右向左念都一样的数。如12321就是一个典型的回文数。

给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数。用’A’,’B’……表示10,11等等。

题解:数制转换一下

代码:

/*ID:     lishicaoPROG:   palsquareLANG:   C++*/#include <iostream>#include <fstream>#include <cstring>using namespace std ;ifstream fin  ( "palsquare.in"  ) ;ofstream fout ( "palsquare.out" ) ;int   B ;char  num[30] ;char  function[20] = { '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ,                       'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' } ;bool check(){    for( int i = 0 ; i < strlen( num ) ; i ++ )        if( num[i] != num[strlen( num ) - i - 1] ) return false ;    return true ;}void getnum( int number ){    memset( num , 0 , sizeof( num ) ) ;    char temp[30] ;    int  i , j ;    int base = B ;    i = 29 ;    while( number != 0 )    {        int tmp = number % base ;        tmp /= base / B ;        temp[i] = function[tmp] ;        number -= tmp * ( base / B ) ;        base *= B ;        i -- ;    }    i ++ ;    for( j = 0 ; i <= 29 ; i ++ , j ++ )        num[j] = temp[i] ;}int  main(){    int  i , j , number ;    fin >> B ;    for( i = 1 ; i <= 300 ; i ++ )    {        number = i * i ;        getnum( number ) ;        if( check() ) {            getnum( i ) ;            fout << num << " " ;            getnum( number ) ;            fout << num << endl ;        }    }}

代码写得好搓啊

原创粉丝点击