【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108488
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

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

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

INPUT FORMAT:

(file palsquare.in)

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

OUTPUT FORMAT:

(file palsquare.out)

每行两个数字,第二个数是第一个数的平方,且第二个数是回文数。(注意:这两个数都应该在B那个进制下) 。

input:
10

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

【参考程序】:
/*
ID: XIONGNA1
PROG: palsquare
LANG: C++
*/
#include<iostream>
#include<cstring>
using namespace std;
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 b;
bool tf(string s)
{
    int len=s.length()-1;
    for (int i=1;i<=len/2;i++)
        if (s[i]!=s[len-i+1]) return false;
    return true;
}
int main()
{
    freopen("palsquare.in","r",stdin);
    freopen("palsquare.out","w",stdout);
    cin>>b;
    string s1,s2;int k;
    for (int i=1;i<=300;i++)
    {
        k=i;s1=' ';
        while (k)
        {
            s1=s1+a[k%b];
            k=k/b;
        }
        k=i*i;s2=' ';
        while (k)
        {
            s2=s2+a[k%b];
            k=k/b;
        }
        if (tf(s2))
        {
            for (int j=s1.length()-1;j>=1;j--)
                cout<<s1[j];
            s2.erase(0,1);
            cout<<' '<<s2<<endl;
        }
    }
    return 0;
}

posted on 2009-07-14 17:00 开拓者 阅读(497) 评论(0)  编辑 收藏 引用 所属分类: USACO 题解

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理