读题:1到300之间的平方转换为B进制,判断B进制下的数是不是回文数。
1.主要就是对数字进行进制转换,我最常用的就是短除发取余来转换,抓换为几进制就对几取余直到为o.
2.我第一想法就是用字符串来判断将我们取到的余数转换为字符连接起来,在这里题目要求大于9的数用ABC依次表示。在这当我们取余超过9时我们求超过的部分再往’A’字符上加就可以得到大于10所对应的字母了。
3.我们求得一个数的B进制后的字符串,我们就要用两个指针一个从前面开始遍历,另一个从结尾开始遍历,只要碰到不相等的就直接终止循环返回这个数不是回文数。走到最后都相同就是回文数。
#include <iostream>
#include <algorithm>
using namespace std;
char get(int x){
if (x < 10)
return x + '0';
else
return x-10+'A';
}
string duanchu(int n, int b){
string s;
while (n) {
s += get(n % b);
n /= b;
}
reverse(s.begin(), s.end());
return s;
}
bool pd(string s){
for (int i = 0, j = s.size()-1;i<j;i++,j--)
if (s[i] != s[j])
return 0;
return 1;
}
int main(){
int b;
cin >> b;
for (int i = 1; i <= 300; i ++ ){
int a = i*i;
string s = duanchu(a, b);
if (pd(s))
cout << duanchu(i, b) << ' ' << s << endl;
}
return 0;
}