小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; }关键还是在判断在几进制之下是不是回文数的函数。
转载请标明出处:#问题求解与编程# 实验四 F 小A回文数
文章来源: #问题求解与编程# 实验四 F 小A回文数