蒟蒻第一次在C站来提问题,若觉本人垃圾,勿喷。
本人伸手党,不喜勿喷。
求神犇来解orz
题目描述
一个正整数如果正读与反读都一样则称为回文数。比如十进制232是回文,二进制11011也是回文。有些数十进制和二进制均为回文,称为双进制回文数。
例如:33,十进制下是回文数,转换成二进制为100001,也是回文。我们则称33为双进制回文数。
给定n,输出1-n之间所有的双进制回文数。
输入格式
一个正整数n
输出格式
输出1-n之间所有双进制回文数,每行一个,格式:十进制数:二进制数.
如:
5:101
717:1011001101
所有数按从小到大排列。
输入输出样例
样例1
输入样例 复制
20
输出样例 复制
1:1
3:11
5:101
7:111
9:1001
本人40分代码:
#include
using namespace std;
bool hw(int a) {
int b=0,temp=a;
while(a>0) {
b*=10;
b+=a%10;
a/=10;
}
return b==temp;
}
bool rjz(int n) {
int i=0,l=0,flag=0;
int a[1000];
while (n!=0) {
a[l++]=n%2;
n=n/2;
}
for (i=0; i<l; i++) if (a[i]!=a[l-1-i]) {
flag=1;
break;
}
if(flag==0) return true;
else return false;
}
int tra(int n) {
int p=1,y=0,yushu;
while(1) {
yushu=n%2;
n/=2;
y+=yushu*p;
p*=10;
if(n<2) {
y+=n*p;
break;
}
}
return y;
}
int main() {
int m;
cin>>m;
for(int k=1; k<=m; k++) {
if(hw(k)==true&&rjz(k)==true) {
cout<<k<<":"<<tra(k)<<endl;
}
}
return 0;
}
求解