user-0 提问: 判断回文数，多次输入多次判断。可是为什么循环下来的多次输入有错误呢？VC6

回复:
user: user-0
content: 图没传上去吗。。。。。

user: user-0
content: 这个就是在递归中把数反过来写。比如123，分别得出3，32，321

user: user-1
content: 判断回文，仅供参考 bool IsHuiWen(int nNum) { 	int m = nNum; 	int nTmp = 0; 	while (m > 0) 	{ 		nTmp = nTmp*10+m%10; 		m = m/10; 	} 	 	if (nTmp == nNum) 	{ 		return true; 	}  	return false;  }

user: user-2
content: 那是因为你的int numpal(int);里面定义了一个static的数据，在第一次的时候没问题，但是在调用第二遍int numpal(int)的时候，那个数本来应该清零后再用，但是static的不会自己清零，试试看我这个成不成 int OriNum;   //全局变量，储存用户输入的最初值 int main() { 	int numpal(int Num,int SedNum=0);       //定义一个递归函数，来求这个数字的回文数 	int i,Num,c; 	for(i=1;i<=5;i++) 	{ 		printf("Please input a integer to check it:"); 		scanf("%d",&Num); 		OriNum=Num; 		//int SedNum=0; 		c=numpal(Num);  		if(c==1) 		printf("Congratulations!You get the palindromic number.\n");    //返回值是1，就说明是回文数，否则不是 		else  		printf("Sorry.The number you input is not a palindromic number.\n"); 	}  	return 0; } int numpal(int Num,int SedNum=0) { 	int Chek(int,int);  //定义一个函数，来检测原数和倒过来后的数字是否相等 	int a,b; 	//static int SedNum=0;  	a=Num%10; 	Num=Num/10; 	SedNum=SedNum*10+a;  	if(Num==0) 		return Chek(OriNum,SedNum); 	else 		return numpal(Num,SedNum); } int Chek(int a,int b) { 	if(a==b) 	return 1;   //原数和反序数相等返回1，否则返回0 	else 	return 0; }

user: user-3
content: 什么叫做你第一个能判断正确？我输入121的时候 压根就判断错误不是回文数，只能输入个位数就说是回文数 只能说你的算法有问题了a=Num%10; Num=Num/10; SedNum=SedNum*10+a;没看懂你写的是什么意思

user: user-0
content: 引用 6 楼 u013163178 的回复:判断回文数，支持大数，仅供参考 /*************************************************************************     > File Name: IsHuiwen.c     > Author: 傻李     > Mail: hellojukay@gmail.com      > Created Time: 2014年11月18日 星期二 14时59分09秒  ************************************************************************/ #include<string.h> #include<stdio.h> int IsHuiWen(int n) { 	char buffer[1000]; 	memset(buffer,'\0',20); 	sprintf(buffer,"%d",n); 	int i; 	int state =1; 	int len = strlen(buffer); 	for(i = 0; i < len; ++i) 	{ 		if(buffer[i] != buffer[len-i - 1]) 		{ 			state = 0; 			break; 		} 	} 	return state; }  int main() { 	int i; 	int n; 	for(i = 0;i < 5; ++i) 	{ 		scanf("%d",&n); 		if(IsHuiWen(n)) 			printf("YES\n"); 		else 			printf("NO\n"); 	} 	return 0; }   初学者，有的函数还看不懂。但是还是谢谢

user: user-0
content: 引用 3 楼 fireofsun 的回复:那是因为你的int numpal(int);里面定义了一个static的数据，在第一次的时候没问题，但是在调用第二遍int numpal(int)的时候，那个数本来应该清零后再用，但是static的不会自己清零，试试看我这个成不成 int OriNum;   //全局变量，储存用户输入的最初值 int main() { 	int numpal(int Num,int SedNum=0);       //定义一个递归函数，来求这个数字的回文数 	int i,Num,c; 	for(i=1;i<=5;i++) 	{ 		printf("Please input a integer to check it:"); 		scanf("%d",&Num); 		OriNum=Num; 		//int SedNum=0; 		c=numpal(Num);  		if(c==1) 		printf("Congratulations!You get the palindromic number.\n");    //返回值是1，就说明是回文数，否则不是 		else  		printf("Sorry.The number you input is not a palindromic number.\n"); 	}  	return 0; } int numpal(int Num,int SedNum=0) { 	int Chek(int,int);  //定义一个函数，来检测原数和倒过来后的数字是否相等 	int a,b; 	//static int SedNum=0;  	a=Num%10; 	Num=Num/10; 	SedNum=SedNum*10+a;  	if(Num==0) 		return Chek(OriNum,SedNum); 	else 		return numpal(Num,SedNum); } int Chek(int a,int b) { 	if(a==b) 	return 1;   //原数和反序数相等返回1，否则返回0 	else 	return 0; }   哦哦，这样就可以了。。原来在函数首部行能初始化变量啊，这样用就特别舒服。

user: user-0
content: 引用 2 楼 longburulin 的回复:什么叫做你第一个能判断正确？我输入121的时候 压根就判断错误不是回文数，只能输入个位数就说是回文数 只能说你的算法有问题了a=Num%10; Num=Num/10; SedNum=SedNum*10+a;没看懂你写的是什么意思   这个就是在递归中把数反过来写。比如123，分别得出3，32，321

user: user-4
content: 判断回文数，支持大数，仅供参考 /*************************************************************************     > File Name: IsHuiwen.c     > Author: 傻李     > Mail: hellojukay@gmail.com      > Created Time: 2014年11月18日 星期二 14时59分09秒  ************************************************************************/ #include<string.h> #include<stdio.h> int IsHuiWen(int n) { 	char buffer[1000]; 	memset(buffer,'\0',20); 	sprintf(buffer,"%d",n); 	int i; 	int state =1; 	int len = strlen(buffer); 	for(i = 0; i < len; ++i) 	{ 		if(buffer[i] != buffer[len-i - 1]) 		{ 			state = 0; 			break; 		} 	} 	return state; }  int main() { 	int i; 	int n; 	for(i = 0;i < 5; ++i) 	{ 		scanf("%d",&n); 		if(IsHuiWen(n)) 			printf("YES\n"); 		else 			printf("NO\n"); 	} 	return 0; }