記錄下寫的代碼和題目方便自己不會(huì)忘記(進(jìn)制函數(shù)含借鑒) 問題描述:如果一個(gè)正整數(shù)n至少在兩個(gè)不同的進(jìn)位制b1和b2下都是回文數(shù)(2<=b1,b2<=10),則稱n是雙基回文數(shù)(注意:回文數(shù)不能包含前導(dǎo)0)。 輸入正整數(shù)S<10^6,輸出比S大的最小雙基回文數(shù)。
樣例輸入:1600000
樣例輸出:1632995
分析:最自然的想法就是:從S+1開始,依次判斷每個(gè)數(shù)是否為雙基回文數(shù),而在判斷時(shí)要列舉所有可能的基數(shù)(2~10),一切都是那么的”暴力“。然而令人意外的是,這樣做對(duì)于S<10^6這樣的小規(guī)模數(shù)據(jù)來(lái)說是足夠快的。因?yàn)檫@種數(shù)密度很大,這也是為什么不會(huì)爆的原因。
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; } } }}新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注