C程序,以查找数字是否是回文

我做了一个C程序来检查一个数字是否是回文。 我使用了以下代码,但它显示了像12321这样的数字作为非回文。 你能解释一下下面程序中的错误吗?

#include  int main() { int i, x, n, c, j; int d=0; printf ("enter total digits in number: "); scanf ("%d", &i); printf ("\nenter number: "); scanf ("%d", &n); j=n; for (x=1; x<=i; x++) { c= j%10; d=c*(10^(ix))+d; j=(jc)/10; } if (d==n) { printf ("\npalindrome"); } else { printf ("\nnon palindrome"); } return 0; } 

^是xor运算符。

为了提高功率,你需要包含math.h并调用pow

 d = (c * pow(10, i - x)) + d; 

这个算法就像人类思维一样简单,而且很有效

 #include  int main() { int i=0,n,ok=1; char buff[20]; printf("Enter an integer: "); scanf("%d", &n); // i am ommiting error checking n=sprintf(buff,"%d",n); //convert it to string, and getting the len in result if(n<2) return 0; i=n/2; n--; while(i && ok) { i--; //printf("%c == %c %s\n", buff[i],buff[ni],(buff[i]==buff[ni])?"true":"false"); ok &= (buff[i]==buff[ni]); } printf("%s is %spalindrome\n",buff, ok?"":"not "); return 0; } 
 // Yet another way to check for palindrome. #include  #include  int main(int argc, char **argv) { int n, rn, tn; printf("Enter an integer: "); scanf("%d", &n); // reverse the number by repeatedly extracting last digit, add to the // previously computed partial reverse times 10, and keep dropping // last digit by dividing by 10 for (rn = 0, tn = n; tn; tn /= 10) rn = rn * 10 + tn % 10; if (rn == n) printf("%d is palindrome\n", n); else printf("%d is not palindrome\n", n); } 

像这样的循环可能会:

 int src; // user input int n; // no of digits int res = 0; int tmp; // copy of src // .... read the input: n and src .... tmp = src; for(int i = 0; i < n; i ++) { int digit = tmp % 10; // extract the rightmost digit tmp /= 10; // and remove it from source res = 10*res + digit; // apend it to the result } // ...and test if(res == src)...