USACO Section 1.2.4 Palindromic Squares

既然是各种进制,那就写个函数解决进制转换的问题吧,相信这个不难吧,但应该注意的是大于10的进制应该有字母出现的,多以多处理一步吧

我写的进制转换的函数名字是jinzhi(),有两个参数,第一个是要转换的数,第二个是要转换成哪种进制的,返回的是字符串,应为转换过后的那个数用

十进制表示很可能溢出(事实上肯定会溢出)

既然有回文判断,那就写个函数判断是不是回文就好了,简单!

下面的步骤就好办了,1-300以内的,首先用十进制表示,再转换成所要求的进制,再判断是不是符合要求,

下面是代码


/*
ID: zhuihun1
PROG: palsquare
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
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()
{
    ofstream fout ("palsquare.out");
    ifstream fin ("palsquare.in");
    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;
}


你可能感兴趣的:(USACO Section 1.2.4 Palindromic Squares)