palsquare-各进制回文数<uscao>1.2

来源:互联网 发布:淘宝怎么借贷 编辑:程序博客网 时间:2024/04/30 15:38

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;elseresult2[++f3]=mod1+55;}while(t);do{mod=div%x;div=div/x;if(mod<10)result[++f1]=mod+48;elseresult[++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;}


0 0