USACO Section 1.2 Palindromic Squares

题目描述

回文是向后读取相同向前的数字。 数字12321是典型的回文。
给定基数B(2 <= B <= 20基10),打印所有整数N(1 <= N <= 300基10),使得当在基数B中表示时,N的平方值为回文; 也打印该回音广场的价值。 使用字母'A','B'等代表数字10,11等等。
打印基数B和数字二。

程序名称:palsquare

输入格式

单行B,基数(在10中指定)。

输入(file palsquare.in)

10

输出格式

具有在B中表示的两个整数的行。第一个整数是其正方形是回文的数字; 第二个整数是平方本身。 注意两个整数都在基本B上!

输出(file palsquare.out)

1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

扫描二维码关注公众号,回复: 11960053 查看本文章

解题思路

本题主要思路是,把1~300的每个数的平方算出来,然后计算出它m进制时的表示方式其为字符串的形式,若它为回文数则输出这个数的平方m进制的表示方式和这个数m进制的表达形式,因为要多次计算一个数的m进制表示形式,因此我们把它设置成一个函数。

解题代码

/* 
ID: 15189822
PROG: palsquare 
LANG: C++ 
*/  
#include<iostream>  
#include<fstream>  
#include<string>  
using namespace std;  
ofstream fout("palsquare.out");  
ifstream fin("palsquare.in"); 
string jinzhi(int n,int x){  
    string res="";  
    char c;  
    while(n>0){  
        if(n%x>9)  
            c=55+n%x;  
        else  
            c='0'+n%x;  
        res=c+res;  
        n/=x;  
    }  
    return res;  
}  
bool huiwen(string str){  
    int l=(int)str.length();  
    for(int i=0;i<l/2;i++){  
        if(str[i]!=str[l-i-1])  
            return false;  
    }  
    return true;  
}  
int main(){   
    int m;  
    fin>>m;  
    for(int i=1;i<=300;i++){  
        if(huiwen(jinzhi(i*i,m)))  
            fout<<jinzhi(i,m)<<" "<<jinzhi(i*i,m)<<endl;  
    }  
    return 0;  
}  


猜你喜欢

转载自blog.csdn.net/YanLucyqi/article/details/72811293