Dual Palindromes
題目描述
如果一個數從左往右讀和從右往左讀都是一樣,那麼這個數就叫做“迴文數”。例如,12321就是一個迴文數,而77778就不是。當然,迴文數的首和尾都應是非零的,因此0220就不是迴文數。
事實上,有一些數(如21),在十進制時不是迴文數,但在其它進制(如二進制時爲10101)時就是迴文數。
編一個程序,從文件讀入兩個十進制數N (1 <= N <= 15)S (0 < S < 10000)然後找出前N個滿足大於S且在兩種或兩種以上進制(二進制至十進制)上是迴文數的十進制數,輸出到文件上。
本問題的解決方案不需要使用大於32位的整型
輸入輸出格式
輸入格式:
只有一行,用空格隔開的兩個數N和S。
輸出格式:
N行, 每行一個滿足上述要求的數,並按從小到大的順序輸出。
輸入輸出樣例
輸入樣例#1:
3 25
輸出樣例#1:
26
27
28
主要的方法是求餘計算每個進制之下的數,再遍歷判斷是否是迴文。水題。
Code
#include<iostream>
using namespace std;
char s[15][1000]; // s[i] 表示 i 進制下的這個數
int main()
{
int n,st,ans = 0,cnt = 0;
cin >> n >> st;
for (int i=st+1;ans < n;i++)
{
int p = 0; // 迴文次數
for (int j=2;j<=10;j++)
{
bool flag = true;
int temp = i;
while(temp)
{
s[j][cnt] = (temp % j) + 48;
temp /= j;
cnt++;
}
for (int k=0;k<cnt/2;k++)
{
if (s[j][k] != s[j][cnt-k-1])
{
flag = false;
break;
}
}
cnt = 0;
if (flag) p++;
if (p == 2)
{
ans++;
cout << i << endl;
break;
}
}
}
return 0;
}