洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares

题目描述

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

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

输入输出格式

输入格式:

 

共一行,一个单独的整数B(B用十进制表示)。

 

输出格式:

 

每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。

 

输入输出样例

输入样例#1: 复制
10
输出样例#1: 复制
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696

说明

题目翻译来自NOCOW。

USACO Training Section 1.2

思路:模拟

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int b;
int num[100];
int main(){
    scanf("%d",&b);
    for(int i=1;i<=300;i++){
        int x=i*i,tot=0,flag=0;
        while(x){ num[++tot]=x%b;x/=b; }
        for(int j=1;j<=tot/2;j++)
            if(num[j]!=num[tot-j+1])    flag=1;
        if(!flag){
            x=i;tot=0;
            while(x){ num[++tot]=x%b;x/=b; }
            for(int j=tot;j>=1;j--)
                if(num[j]<10)    cout<<num[j];
                else cout<<char(num[j]+55);
            cout<<" ";
            x=i*i;tot=0;
            while(x){ num[++tot]=x%b;x/=b; }
            for(int j=tot;j>=1;j--)
                if(num[j]<10)    cout<<num[j];
                else cout<<char(num[j]+55);
            cout<<endl;
        }
    }
}
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
原文地址:https://www.cnblogs.com/cangT-Tlan/p/7862393.html