1 条题解
-
0
#include<bits/stdc++.h> using namespace std; // 全局变量: int b; // 存储用户输入的进制(2-12之间) int a[1000]; // 存储转换进制后的各位数字 char g[12] = {'A','B','C','D','E','F','G','H','I','J','K','L'}; // 大于9的数字用字母表示(10→A, 11→B...) // 判断函数:检查数字x在b进制下是否是回文数(正着读和倒着读都一样) bool judge(int x) { int stop = 1; // 假设是回文数(1表示是,0表示不是) int tail = 1; // 记录数字的位数(从1开始计数) // 将数字x转换成b进制,存入数组a while(x != 0) { a[tail] = x % b; // 取余数(当前位的数字) x = x / b; // 去掉最后一位 tail++; // 位数增加 } tail--; // 上面循环多加了1,这里减回来 // 检查是否是回文:比较对称位置上的数字 for(int i = 1; i <= (tail+1)/2; i++) { if(a[i] != a[tail+1-i]) { // 如果对称位置数字不同 stop = 0; // 标记不是回文数 break; // 跳出循环 } } // 返回判断结果 if(stop == 1) return true; // 是回文数 else return false; // 不是回文数 } // 打印函数:将数字x用b进制表示并打印出来 void print(int x) { int tail = 1; // 记录位数 // 将数字x转换成b进制(和judge函数中相同) while(x != 0) { a[tail] = x % b; // 取余数 x = x / b; // 去掉最后一位 tail++; // 位数增加 } tail--; // 修正位数 // 从高位到低位打印(因为转换时是从低位到高位存的) for(int i = tail; i >= 1; i--) { if(a[i] <= 9) cout << a[i]; // 小于等于9直接打印数字 else cout << g[a[i]-10]; // 大于9打印对应字母(10→A, 11→B...) } } int main() { cin >> b; // 输入进制数(2-12之间) // 检查1到300之间的每个数 for(int i = 1; i <= 300; i++) { // 如果i的平方在b进制下是回文数 if(judge(i*i) == true) { print(i); // 打印原始数i(b进制) printf(" "); // 打印空格 print(i*i); // 打印平方数(b进制) printf("\n"); // 换行 } } return 0; // 程序结束 }
- 1
信息
- ID
- 217
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者