版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a_step_further/article/details/77074419
题目:寻找一个大于10的最小正整数,使其本身、二进制转化值、八进制转化值,都是回文
暴力解法:
#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
string conv(int N, int jinzhi);
template<class T> string to_string(const T& t);
int judgeHW(string input);
int main()
{
int m = 11;
int i;
while(m > 10){
i ++;
string shijinzhi = to_string(m);
string twojinzhi = conv(m,2);
string eightjinzhi = conv(m,8);
if(judgeHW(tenjinzhi) && judgeHW(twojinzhi) && judgeHW(eightjinzhi)){
cout << "循环了 " << i << "次,找到 " << m << endl;
cout << "3种进制下的数字分别为:" ;
cout << tenjinzhi << " " << twojinzhi << " " << eightjinzhi << endl;
break;
}
m ++;
}
return 0;
}
//将N转化为jinzhi进制
为string conv(int N, int jinzhi){
string output;
while(N > 0){
int yushu = N % jinzhi;
N = N/jinzhi;
output = to_string(yushu) + output;
}
return output;
}
template<class T> string to_string(const T& t){
ostringstream os;
os << t;
return os.str();
}
int judgeHW(string input){
int flag = 1;
int i = 0;
int j = input.length() - 1;
while(i <= j){
if(input[i] == input[j]){
i += 1;
j -= 1;
continue;
}else{
flag = 0;
break;
}
}
return flag;
}
多动一下脑,如果一个数字转化为二进制以后是回文,那么个位数一定是1,因为如果是0则要求首位也是0,不合理。故而该数一定是一个奇数。那么在上述循环遍历时,只判断奇数即可。