回文寻找

来源:互联网 发布:零基础学算法第一章 编辑:程序博客网 时间:2024/05/22 03:52

题目:寻找一个大于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,不合理。故而该数一定是一个奇数。那么在上述循环遍历时,只判断奇数即可。

原创粉丝点击