7-8 1.2.4 回文平方数 (80分)

    技术2022-07-11  138

    回文数是指从左向右念和从右像做念都一样的数.如 12321 就是一个典型的回文数. 给定一个进制 B(2<=B<=20 十进制),输出所有的大于等于1,小于等于 300 且它的平方用 B 进制表示时是回文数的数.用’A’,’B’……表示 10,11 等等.

    输入格式: 共一行,一个单独的整数 B(B 用十进制表示).

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

    输入样例1: 在这里给出一组输入。例如:

    10

    输出样例1: 在这里给出相应的输出。例如:

    1 1 2 4 3 9 11 121 22 484 26 676 101 10201 111 12321 121 14641 202 40804 212 44944 264 69696

    输入样例2:

    5

    输出样例2:

    1 1 2 4 11 121 101 10201 111 12321 231 114411 1001 1002001 1111 1234321

    输入样例3:

    15

    输出样例3:

    1 1 2 4 3 9 4 11 8 44 C 99 11 121 14 191 22 484 29 6B6 44 1331 51 1AA1 88 4CC4 99 6226 101 10201 111 12321 121 14641 131 16B61


    【源代码】

    #include <iostream> #include <string> #include <algorithm> using namespace std; bool Palin_num(const string a) // 回文数判断函数,使用字符串判断法:回文数关于中心对称,只要比较对称的数即可; { int length; length = a.length(); int flag = 1; for (int i = 0; i <= (length / 2); i++) { if (a[i] != a[length - i - 1]) { flag = 0; break; } } if (flag == 1) // 是回文数; { return true; } else { return false; } } string intToA(int n, int radix) //进制转换函数,使用模N取余法; { string ans = ""; do { int t = n % radix; if (t >= 0 && t <= 9) { ans += t + '0'; } else { ans += t - 10 + 'A'; // 保证进制大于10时,数字能用大写字母表示; } n /= radix; } while (n != 0); // 使用do{}while(),以防止输入为0的情况; reverse(ans.begin(), ans.end()); // 模N取余法,得到的字符串反转即可得到对应进制的数; return ans; } int main() { int n; cin >> n; int j = 0; for (int x = 1; x <= 300; x++) { j = x; // 创建副本 string s1 = intToA(j, n); // 将整数按n进制转换; string s2 = intToA((j * j), n);// 将该数的平方按n进制转换; if (Palin_num(s2)) { cout << s1 << " " << s2 << endl; } else { continue; } } return 0; }
    Processed: 0.013, SQL: 9