USACO Section1.2 Palindromic Squares 解题报告

    palsquare解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
  把1~300中,其平方在B进制下是回文数的数进行输出。每个数x输出一行,输出B进制下的x和x²,用空格隔开。
  注意,10~19这些数字,用大写字母'A'、'B'等表示。
【数据范围】
  1<=B<=20
【输入样例】
  10
【输出样例】
  1 1
  2 4
  3 9
  11 121
  22 484
  26 676
  101 10201
  111 12321
  121 14641
  202 40804
  212 44944
  264 69696
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
  进制转换会,就没难度。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
  进制转换犯了个小错,输出一开始用的cout。

------------------------------------------------------------------------------------------------------------------------------------------------

【代码】

 1 /*
 2 ID: icedrea1
 3 PROB: palsquare
 4 LANG: C++
 5 */
 6 
 7 #include <iostream>
 8 #include <fstream>
 9 using namespace std;
10 
11 int B;
12 char to[20]={   '0','1','2','3','4','5','6','7','8','9',
13                 'A','B','C','D','E','F','G','H','I','J'  };
14 
15 string change(int x)
16 {
17     string num;
18     while(x) { num=to[x%B]+num; x/=B; }
19     return num;
20 }
21 
22 bool isPal(int x)
23 {
24     string num=change(x*x);
25     for(int i=0;i!=num.size();++i)
26         if(num[i]!=num[num.size()-1-i]) return false;
27     return true;
28 }
29 
30 int main()
31 {
32     ifstream in("palsquare.in");
33     ofstream out("palsquare.out");
34 
35     in>>B;
36     for(int i=1;i<=300;++i)
37     {
38         if(!isPal(i)) continue;
39         out<<change(i)<<" "<<change(i*i)<<endl;
40     }
41 
42     in.close();
43     out.close();
44     return 0;
45 }

 

posted on 2015-03-08 23:27  IceDream61  阅读(197)  评论(0编辑  收藏  举报

导航