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 }
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 }