Dual Palindromes 雙重回文數
阿新 • • 發佈:2018-12-09
如果一個數從左往右讀和從右往左讀都是一樣,那麼這個數就叫做“迴文數”。例如,12321就是一個迴文數,而77778就不是。當然,迴文數的首和尾都應是非零的,因此0220就不是迴文數。 事實上,有一些數(如21),在十進位制時不是迴文數,但在其它進位制(如二進位制時為10101)時就是迴文數。 編一個程式,從檔案讀入兩個十進位制數N (1 <= N <= 15)S (0 < S < 10000)然後找出前N個滿足大於S且在兩種或兩種以上進位制(二進位制至十進位制)上是迴文數的十進位制數,輸出到檔案上。 本問題的解決方案不需要使用大於32位的整型
Input
只有一行,用空格隔開的兩個數N和S。
Output
N行, 每行一個滿足上述要求的數,並按從小到大的順序輸出.
Sample Input
3 25
Sample Output
26
27
28
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> using namespace std; typedef long long ll; char aa[101010]; ll yang2() { ll n,t,ans=0; n=strlen(aa); ll i; for(i=0;i<n/2;i++) { if(aa[i]==aa[n-i-1]) ans++; } if(ans>=n/2) return 1; else return 0; } ll yang(ll n,ll a) { ll m; memset(aa,0,sizeof(aa)); ll i=0; while(n) { aa[i++]=n%a+48; n/=a; } aa[i]=0; //puts(aa); ll d=yang2(); if(d==1) return 1; else return 0; } int main() { ll n,s,i,j,ans=0; cin>>n>>s; for(i=s+1;;i++) { ans=0; if(n==0) break; for(j=2;j<=10;j++) { ll b=yang(i,j); if(b==1) ans++; if(ans>=2) break; } if(j<=10) { cout<<i<<endl; n--; } } return 0; }
e 一定注意加48~~~