双基回文数 简单枚举 暴力啊
如果一个正整数n至少在两个不同的进位制b1和b2下都是回文数(2<=b1,b2<=10),则称n是双基回文数(注意,回文数不能包含前导零).输入正整数S<10的6次方,输出笔S大的
最小双基回文数.
样例输入:1600000
样例输出:1632995
分析:最自然的想法就是:从n+1开始依次判断每个数是否为双基回文数,而在判断时要枚举所有可能的基数(2-10),一切都是那么的"暴力".令人意外的是:这样做对于S<10的6次方
这样的"小规模数据"来说是足够快的----双基回文数太多太密了.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream> using namespace std; bool huiwen(int n) { int total=0; for(int base=2;base<=10;base++) { int i=1,a[30],s; s=n; while(s) { a[i]=s?se; s=s/base; i++; } i--; int j; for(j=1;j<=i/2;j++) if(a[j]!=a[i-j+1])break; if(j>i/2)total++; if(total>=2)return true; } return false; } int main() { int s; while(scanf("%d",&s)==1) { for(s=s+1;;s++) { if(huiwen(s)) { cout<<s<<endl;break;}//不可以不加大括号,那样就不管是不是都break;即重新输入 } } return 0; }