判断回数,算法肯定没问题,但是就是函数结果读不进去....求助!!急!
#include<stdio.h>
#include<string.h>
int IS_A_HuiShu(char a[],int L)
{
int R=0;int P;
P=L-1;
while((a[P]==a[R]))
{
R++,P--;
}
if((P==0)&&(R==L-1))
return 1;
else
return 0;
}
void main()
{
char a[100],ch;
int i=0,flag=0;
printf("Enter a string (End with @):");
while((ch=getchar())!='@') //这个地方明明是i从0开始 但是i总是读第一个之前就等于1了
{ //导致上面的函数里面的都要减去1。
a[i]=ch;
i++;
}
flag=IS_A_HuiShu(a,i);
if(flag==1)
printf("it's a 回数");
else
printf("不是回数");
}
希望各位高手大侠就用原算法上修改
不要用新的算法 .
[解决办法]
while((a[P]==a[R])) //有越界行为。。while(a[P]==a[R] && R < L && P > -1)
{
R++,P--;
}
if((P==0)&&(R==L-1)) //上面遍历完后这里的 P<0 或 R ==L 两取一就OK了
[解决办法]
可能会越界,P 有可能变为 -1, R 有可能变为 L
加一个条件
while(P > 0 && (a[P]==a[R]))
#include<stdio.h>#include<string.h>int IS_A_HuiShu(char a[],int L){ int R=0;int P; P=L-1; while(P > 0 && (a[P]==a[R])) { R++,P--; } if((P==0)&&(R==L-1)) return 1; else return 0;}int main(){ char a[100],ch; int i=0,flag=0; printf("Enter a string (End with @):"); while((ch/
[解决办法]
其实很简单,就是把if((P==0)&&(R==L-1))return 1;elsereturn 0;
[解决办法]
#include<stdio.h>#include<string.h>int IS_A_HuiShu(char a[],int L){ int R=0; int P; P=L-1; while((a[P] == a[R]) && R < L-1) //在加一个条件控制 { R++;//逗号改成分号 P--; } if((P == 0)&&(R==L-1)) return 1; else return 0;}void main(){ char a[100],ch; int i=0,flag=0; printf("Enter a string (End with @):"); while((ch=getchar())!='@') //这个地方明明是i从0开始 但是i总是读第一个之前就等于1了 { //导致上面的函数里面的都要减去1。 a[i]=ch; i++; } printf("%d\n",i); flag=IS_A_HuiShu(a,i); if(flag==1) printf("it's a 回数"); else printf("不是回数");}
[解决办法]
LZ看看这个,思路比较清晰。
#include<stdio.h>#include<string.h>int IS_A_HuiShu(char *a, int len){ int low=0,high=len-1; int flag; //回文式数标志 while( low<=high ) { flag=0; if( a[low]==a[high] ) { flag=1; low++; high--; } else break; } if(flag) return 1; //是回文式数 return 0;}int main(){ char a[100]; printf("hi,buddy!\n请输入一个数字字符串,我来判断是否是回文式数! \n"); scanf("%s",a); if( IS_A_HuiShu( a, strlen(a) ) ) printf("是回数\n"); else printf("不是回数\n"); return 0;}
[解决办法]
#include<stdio.h>
#include<string.h>
int IS_A_HuiShu(char a[],int L)
{
int R=0;int P;
P=L-1;
while((a[R]==a[P])&&P>R)
{
R++;
P--;
}
if(R>=P)
return 1;
else
return 0;
}
void main()
{
char a[100],ch;
int i=0,flag=0;
printf("Enter a string (End with @):\n");
while((ch=getchar())!='@')
{
a[i]=ch;
i++;
}
flag=IS_A_HuiShu(a,i);
if(flag==1)
printf("it's a 回数\n");
else
printf("不是回数\n");
}