the reason of failuire:1、题目是要求第一行输入N S 第一个数N为需要输出从S开始的符合条件的N个数,而我误解为S开始到S+N区间里的数.
2、开了一个名为qq的数组用来标记各个数字转换进制为为回文数的次数,但开得比较小,结果数据大于所开的数组了,应该看着题意来开数组.
thinking:把从S开始的数转换为2-10进制,然后判断其是否为回文数,然后统计其是回文数的次数,然后判断次数是否>=2,如果是则输出,然后用一个标记来记忆输出的次数以便循环的结束.
题目:
★Dual Palindromes 双重回文数
如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321 就是一
个回文数,而 77778 就不是.当然,回文数的首和尾都应是非零的,因此 0220 就不是回文数.
事实上,有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是
回文数.
11
编一个程序,从文件读入两个十进制数
N (1 <= N <= 15) S (0 < S < 10000)
然后找出前 N 个满足大于 S 且在两种以上进制(二进制至十进制)上是回文数的十进制数,输出到
文件上.
本问题的解决方案不需要使用大于 4 字节的整型变量.
PROGRAM NAME: dualpal
INPUT FORMAT
只有一行,用空格隔开的两个数 N 和 S.
SAMPLE INPUT (file dualpal.in)
3 25
OUTPUT FORMAT
N 行, 每行一个满足上述要求的数,并按从小到大的顺序输出.
SAMPLE OUTPUT (file dualpal.out)
26
27
28
源代码:
/*
PROG: dualpal
LANG: C++
ID: me
*/
#include <bits/stdc++.h>
using namespace std;
int main(){
freopen("dualpal.in","r",stdin);
freopen("dualpal.out","w",stdout);
long long a1,f1=0,a2,i,j,k,l,x,f2,a,f4=0;
char result[500000];
int qq[50000];
memset(qq,0,sizeof(qq));
cin >> a1 >> a2;
int mod;
for(i=a2+1;f4!=a1;i++){
for(x=2;x<=10;x++){
f1=0;
f2=0;
a=i;
memset(result,0,sizeof(result));
while(a){
mod=a%x;
a=a/x;
if(mod<10)
result[++f1]=mod+48;
else
result[++f1]=mod+55;
}
for(j=1;j<=f1/2;j++)
if(result[j]!=result[f1-j+1])f2=1;
if(f2==0)
qq[i]++;
}
if(qq[i]>=2){
f4++;
qq[i]=-1;
cout << i << endl;}
}
return 0;
}