#问题求解与编程# 实验四 F 小A回文数

匿名 (未验证) 提交于 2019-12-03 00:26:01

小A回文数

发布时间: 2018年4月9日 15:12   时间限制: 1000ms   内存限制: 128M

描述

最近小A在研究一个数学问题。

如果一个数n,它的二进制数和十进制数是回文数(例如1001,66,64446都是回文数),那么小A就把它命名为小A回文数。但是小A想知道,如果给定两个数n和m,它们之间有哪些数是小A回文数呢?(1<=n<=m<=10^6)

输入

输入包含多组,每组测试数据包含两个整数n,m,其中1<=n<=m<=1000000

输出

对于每一组测试数据,输出的结果之间用换行隔开。

样例输入1
1 5
样例输出1
1 3 5
样例输入2
5 10
样例输出2
5 7 9
―――――――――――――――――――――――――――――――――――――――――――――――――――

小A回文数 解决关键在于进制问题 下面附上AC代码:

#include <stdio.h>   #include<iostream> using namespace std;  bool isPal(int num, int radix) { 	int temp = num; 	int pal = 0; 	for(;num!=0;) 	{ 		pal *= radix; 		pal += num%radix;	 		num /= radix; 	} 	return temp == pal; }  //取模除法交替弄  int main()   {   	int A[10000]; 	int a,b,count, flag,j; 	while(cin>>a>>b) 	{ 		for(int i=a;a<=b;a++) 		{ 			count = 0; 			flag = 0; 			j=0; 			if(isPal(a,2)&&isPal(a,10))  			cout<<a<<endl; 		} 	}     return 0;   }

下面是标程:

#include<cstdio> bool ispal(int num,int radix) {     int t=num;     int pal=0;     while(num)//在计算机中,0表示假,非0表示真,这里就相当于num为真,相当于while(num!=0)     {         pal*=radix;//判断radix进制下         pal+=num%radix;         num/=radix;     }     return t==pal; } bool judge(int num) {     if(ispal(num,2)&&ispal(num,10))//在二进制下和十进制下都为回文数         return true;     return false; } int main() {     //freopen("data.in","r",stdin);     int n,m;     while(scanf("%d%d",&n,&m)!=EOF)     {         for(int i=n;i<=m;i++)             if(judge(i))                 printf("%d\n",i);     }     return 0; }
关键还是在判断在几进制之下是不是回文数的函数。


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!