2017-06-02 77 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