1. 程式人生 > >USACO palindromic squares 迴文數平方

USACO 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

解題思路

主要就是一個進位制轉換,只要這個會了就無敵了。後面再用一個判斷迴文數就OK了
進位制轉換:https://blog.csdn.net/johnwayne0317/article/details/84980149

程式碼

#include <bits/stdc++.h>
using namespace std;
int jin;
int a[100],c[100];
int k;
int basecnt;
int basecnt2;
char b[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G'
,'H','I','J'}; void many(int n){ k=0; while(n!=0){ n/=10; k++; } return ; } //change和change2是基本一樣的,就是可以用兩個不同的陣列儲存,這樣寫方便一點 void change(int n){ basecnt=0; while(n!=0){ a[basecnt]=n%jin; n/=jin; basecnt++; } return ; } void change2(int n){ basecnt2=0; while(n!=0){ c[basecnt2]=n%jin; n/=
jin; basecnt2++; } return ; } int main(){ cin>>jin; int tmp; bool tf=false; for(int i=1;i<=300;i++){ memset(a,0,sizeof(a)); memset(c,0,sizeof(c)); //將原數與原數的平方的n進位制都求出 change2(i); tmp=i*i; change(tmp); } many(tmp); //判斷迴文數 tf=false; for(int j=0;j<basecnt;j++){ if(a[j]!=a[basecnt-1-j]){ tf=true; } } //輸出,由於是迴文數,其平方正的反的隨意,也就是basecnt那個隨意 if(tf==false){ for(int j=basecnt2-1;j>=0;j--){ cout<<b[c[j]]; } cout<<" "; for(int j=basecnt-1;j>=0;j--){ cout<<b[a[j]]; } cout<<endl; } } return 0; }