一道C++程序题,求解!!?

蒟蒻第一次在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;

}

求解