Dual Palindromes<uscao>1.2 <进制转换+枚举>

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值