[USACO][Section 1.2][模拟] Palindromic Squares

题目大意:

在[1,300]范围内,找出符合条件“其平方在b进制下为回文数”的所有整数。

思路:

简单模拟,思路见注释。

代码:

/*
ID: lujunda1
LANG: C++
PROG: palsquare
*/
#include
#include
#include
#include
#include
using namespace std;
//将整数n转换为b进制并存入字符数组num[]中 
void trans(char num[],int n,int b)
{
    for(int i=0;;i++)
    {
        num[i]=n%b>9?n%b-10+'A':num[i]=n%b+'0';
        n/=b;
        if(n==0)
        {
            num[i+1]='\0';
            break;
        }
    }
    for(int i=0;i<strlen(num)/2;i++)
        swap(num[i],num[strlen(num)-1-i]);
}
//判断n*n是否是回文数 
void func(int n,int b)
{
    char num[100],temp[100];
    trans(num,n*n,b);
    for(int i=0;i<=strlen(num)/2;i++)
        if(num[i]!=num[strlen(num)-1-i])
            return;
    trans(temp,n,b);
    printf("%s %s\n",temp,num);
}
int main()
{
    freopen("palsquare.in","r",stdin);
    freopen("palsquare.out","w",stdout);
    int b;
    scanf("%d",&b);
    for(int i=1;i<=300;i++)
        func(i,b);
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注