USACO palsquare

给出Base b( 2<=b<=20),10进制下1~300的平方的b进制数若为回文数,则输出平方数及原数(按b进制输出),超出9的那一位用A、B...代替

超出9部分的字符转换出现问题,要注意。

if(s1[ll]>9)
            s1[ll] += 'A' - 10;
        else
            s1[ll] += '0';

 

 1 #include <cstdio>
 2 
 3 FILE *fin = fopen("palsquare.in","r");
 4 FILE *fout = fopen("palsquare.out","w");
 5 
 6 void solve(int  b, int x)
 7 {
 8     int l = 0, ll = 0;
 9     char s[20], s1[20];
10     int temp = x;
11     while(temp>0)
12     {
13         /*int ch = temp % b ;
14         if(ch<10)
15             s1[ll] = ch + '0';
16         else
17             s1[11] = ch + 'A' - 1;
18             */
19         s1[ll] = temp % b;
20         if(s1[ll]>9)
21             s1[ll] += 'A' - 10;
22         else
23             s1[ll] += '0';
24         temp /= b;
25         ll++;
26     }
27     s[ll]='\0';
28     x *= x;
29     while(x>0)
30     {
31         /*
32         int ch = x % b ;
33         if(ch<10)
34             s[l] = ch + '0';
35         else
36             s[1] = ch + 'A' - 1;
37         */
38         s[l] = x % b;
39         if(s[l]>9)
40             s[l] += 'A' - 10;
41         else
42             s[l] += '0';
43         x /= b;
44         l++;
45     }
46     s[l]='\0';
47     int flag = 0;
48     for(int i=0; i<l/2; i++)
49     {
50         if(s[i]!=s[l-i-1])
51         {
52             flag = 1;
53             break;
54         }
55     }
56     if(flag==0)
57     {
58         for(int i=ll-1; i>=0; i--)
59             fprintf(fout, "%c",s1[i]);
60         fprintf(fout, " ");
61         fprintf(fout, "%s\n",s);
62     }
63 }
64 
65 int main()
66 {
67     int b;
68     fscanf(fin, "%d",&b);
69     for(int i=1; i<=300; i++)
70     {
71         int x = i;
72         solve(b, i);
73     }
74     return 0;
75 }
View Code 

 

posted @ 2013-11-13 18:48  byluoluo  阅读(145)  评论(0编辑  收藏  举报