描述
回文数是指从左向右念和从右向左念都一样的数。如 12321 就是一个典型的回文数。
给定一个进制 B(2<=B<=20,由十进制表示),输出所有的大于等于 1 小于等于 300(十进制下)
且它的平方用 B 进制表示时是回文数的数。用’A’,’B’……表示 10,11 等等。
[编辑]格式
PROGRAM NAME: palsquare
INPUT FORMAT:
file (palsquare.in)
共一行,一个单独的整数 B(B 用十进制表示)。
OUTPUT FORMAT:
file (palsquare.out)
每行两个 B 进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数。
[编辑]SAMPLE INPUT
10
[编辑]SAMPLE OUTPUT
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
程序:
#include
#include
using namespace std;
ifstream fin ("palsquare.in");
ofstream fout ("palsquare.out");
const char a[21] = {'0','1','2','3','4','5','6','7','8','9','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K'};
int n;
void get(int t)
{
string s("");
int m = t * t;
do
{
s = a[m % n] + s;
m /= n;
} while (m > 0);
bool mark(true);
for (int i = 0; i <= s.size() / 2 - 1; i++)
if (s[i] != s[s.size() - i - 1])
{
mark = false;
break;
}
string w("");
do
{
w = a[t % n] + w;
t /= n;
} while (t > 0);
if (mark == true || s.size() == 1)
fout << w << " " << s << endl;
}
int main(void)
{
fin >> n;
for (int i = 1; i <= 300; i++)
get(i);
}
这个牛逼~!:
#include
using namespace std;
int B;
const
int MAX=300;
char CH[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};
void printdata(int x)
{
int a[30],i=0;
while (x>0) a[++i]=x%B,x/=B;
for (;i;cout<a[++n]=xx%B,xx/=B;
while (xx>0)
int t=n;
for (;(n>0)&&(a[n]==a[t-n+1]);--n);
if (n==0) printdata(x),cout<<' ',printdata(x*x),cout<>B;
for (int i=1;i<=MAX;i++) handle(i);
return 0;
}