小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;
}
关键还是在判断在几进制之下是不是回文数的函数。