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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值