打印0110作为回文

时间:2017-06-02 09:15:18

标签: c while-loop numbers reverse palindrome

#include <stdio.h>

int main()
{
   int n, reverse = 0, temp;

   printf("Enter a number to check if it is a palindrome or not\n");
   scanf("%d",&n);

   temp = n;

   while( temp != 0 )
   {
      reverse = reverse * 10;
      reverse = reverse + temp%10;
      temp = temp/10;
   }

   if ( n == reverse )
      printf("%d is a palindrome number.\n", n);
   else
      printf("%d is not a palindrome number.\n", n);

   return 0;
}

上面的代码将检查一个数字是否是回文。它工作正常。如果你输入151它会说它是回文数。但是如果你输入0110它将打印不回文。虽然我知道0110实际上110,但是我的教授说要做什么,将打印011和001100这样的数字作为回文。什么做任何想法?

3 个答案:

答案 0 :(得分:2)

我建议你读一个字符串,然后检查是否是回文。 这是你的代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char buffer[64];
    printf("Enter a number to check if it is a palindrome or not\n");
    scanf("%63s",buffer);
    size_t dim = strlen(buffer);
    for (size_t i = 0; i < (dim / 2); i++) {
        if (buffer[i] != buffer[dim - i - 1]) {
            printf("%s is not a palindrome number.\n", buffer);
            return 0;
        }   
    }
    printf("%s is a palindrome number.\n", buffer);   
    return 0;
}

答案 1 :(得分:1)

尝试使用Int数组实现此操作,而不是将输入保存在一个整数变量中。

在int n中保存整数时,忽略前缀0。但是如果你使用整数数组来存储每个字符,然后处理数组以检查回文,那么所需的结果将是正确的。

在这里查看C中的数组:https://www.tutorialspoint.com/cprogramming/c_arrays.htm

答案 2 :(得分:0)

您可以使用字符串(字符数组)存储输入。我已更新您的代码以使用相同的 -

#include <stdio.h>
#include <stdlib.h>

int get_len (char *inp) {
   int curr_len = 0;
   for (curr_len=0; inp[curr_len] != '\0'; curr_len++);
   return curr_len-1;
}

int main()
{
   int palindrome = 1;
   char *inp = (char *) malloc (100*sizeof(char *));

   printf("Enter a number to check if it is a palindrome or not\n");
   scanf("%s",inp);

   int len = get_len (inp);
   int i;
   for (i=0; i < len/2; i++) 
   {
      if (inp[i] != inp[len-i]) {
        palindrome = 0;
        break;
      }
   }

   if ( palindrome )
      printf("%s is a palindrome number.\n", inp);
   else
      printf("%s is not a palindrome number.\n", inp);

   return 0;
}