问答题
改错题
【题目】
如果将一个二进制数的各位数字的顺序颠倒后所得到的新二进制数与原数相等,则称该二进制数为回文数,以下程序的功能是:在由两个正整数确定的范围内,查找对应的二进制数为回文数的整数,采用的算法是:将待判断的整数转换为二进制数形式,并按正序和反序方式分别存入两个字符串中,比较两个字符串,若两个字符串相等则该数为符合要求的数
正确程序的输入/输出结果如下(下划线部分为键盘输入):
请输入查找范围:100 200
对应的二进制数为回文数的个数为:8
107à1101011
119à1110111
127à1111111
129à10000001
153à10011001
165à10100101
189à10111101
195à11000011
含有错误的源程序如下
#include
#include
char *fun(int t)
{
char s1[33]={0},s2[33]={0},c,*p1,*p2;
p1=s1;p2=s2+31;
while(t){
c=t%2;
t/=2;
*p1++=c;
*p2++=c;
}
p2++;
if(!strcmp(s1,p2)){
char *p=new char[33];
strcpy(p,s1);
return *p;
}
else
return 0;
}
void main()
{
int a[200]={0},low,up;
char *bin[200]={0},*p;
cout<<"请输入查找范围:";
cin>>low>>up;
for(int i=0,j=low;j<=up;j++)
if(p==fun(j)){
a[i]=j; bin[i++]=p;
}
cout<<"对应的二进制数为回文数的个数为:"<"<