2017-06-02 74 views
0
#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这样的数字打印为回文。做什么主意?打印0110作为回文

+3

如果不想松开前导'0',则必须以字符串形式读取数字。这将使回文检查更有效。 – mch

+0

“但我的教授说要做什么会打印出像011这样的数字......” - 如果你的教授告诉你,问题是什么?你应该问他详细说明你是否不明白他的意思。我们不是千里眼。 – Olaf

回答

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; 
} 
+0

检查malloc返回值,释放已分配的内存,并且没有理由在string.h lib的strlen函数中使用get_len。 –

+0

是的,我错过了检查malloc返回值。谢谢你指出。可能应该使用一个数组。 我希望我的解决方案是基本的,并避免使用库函数。因此实现了get_len函数。 –

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

试着用Int数组来实现这个,而不是将输入保存在一个整型变量中。

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

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