记录下写的代码和题目方便自己不会忘记(进制函数含借鉴) 问题描述:如果一个正整数n至少在两个不同的进位制b1和b2下都是回文数(2<=b1,b2<=10),则称n是双基回文数(注意:回文数不能包含前导0)。 输入正整数S<10^6,输出比S大的最小双基回文数。
样例输入:1600000
样例输出:1632995
分析:最自然的想法就是:从S+1开始,依次判断每个数是否为双基回文数,而在判断时要列举所有可能的基数(2~10),一切都是那么的”暴力“。然而令人意外的是,这样做对于S<10^6这样的小规模数据来说是足够快的。因为这种数密度很大,这也是为什么不会爆的原因。
include<iostream>#include<string.h>using namespace std;int fun(int x,int n){ int a[100]; int k=0; memset(a,0,sizeof(a)); for(int i=0;;i++){ a[i]=x%n; x/=n; if(x==0){ k=i; break; } } int flag=1; for(int i=0;i<=k/2;i++){ if(a[i]!=a[k-i]){ flag=0; break; } } if(flag==1)return 1; else return 0;}int main(void){ int n; while(cin>>n){ for(;;n++){ int k=0; int flag=0; for(int i=2;i<=10;i++){ if(fun(n,i)) k++; if(k>=2){ flag=1; break; } }if(flag){ cout<<n<<endl; break; } } }}新闻热点
疑难解答