the reason of failure:1、没考虑输出的每一行的两个值都已经按进制转换了.
thinking:把输入的值转换为各种进制然后判断其是否为回文数,
题目:
★Palindromic Squares 回文平方数
回文数是指从左向右念和从右像做念都一样的数.如 12321 就是一个典型的回文数.
给定一个进制 B(2<=B<=20 十进制),输出所有的大于等于 1 小于等于 300 且它的平方用 B 进制表示
时是回文数的数.用’A’,’B’……表示 10,11 等等.
PROGRAM NAME: palsquare
INPUT FORMAT
共一行,一个单独的整数 B(B 用十进制表示).
SAMPLE INPUT (file palsquare.in)
10
OUTPUT FORMAT
每行两个数字,第二个数是第一个数的平方,且第二个数是回文数.(注意:这两个数都应该在 B 那个
进制下)
SAMPLE OUTPUT (file palsquare.out)
1 1
2 4
3 9
11 121
22 484
26 676
101 10201
111 12321
121 14641
202 40804
212 44944
264 69696
代码:
/*
PROG: palsquare
LANG: C++
ID: me
*/
#include <bits/stdc++.h>
using namespace std;
int main(){
freopen("palsquare.in","r",stdin);
freopen("palsquare.out","w",stdout);
char result[2000];
char result2[500];
int x,div,f1,f2,i,mod1,f3;
cin >> x;
int mod,j,t;
for(j=1;j<=300;j++){
memset(result,0,sizeof(result));
memset(result2,0,sizeof(result2));
div=pow(j,2);
t=j;
f2=0;
f1=0;
f3=0;
do{
mod1=t%x;
t=t/x;
if(mod1<10)
result2[++f3]=mod1+48;
else
result2[++f3]=mod1+55;
}while(t);
do{
mod=div%x;
div=div/x;
if(mod<10)
result[++f1]=mod+48;
else
result[++f1]=mod+55;
}while(div);
for(i=1;i<=f1/2;i++)
if(result[i]!=result[f1-i+1])
f2=1;
//cout << f2 << " ";
if(f2==0){
//cout << "right" << " ";
for(;f3>0;f3--)
cout << result2[f3];
cout << " ";
for(;f1>0;f1--)
cout << result[f1];
cout << endl;
}
}
return 0;
}