2016-07-15 6 views
0

У меня есть один небольшой проект, где я должен запрограммировать один алгоритм, который вычисляет два палиндрома числа. Например: если вход 367, результат равен 367763 и 763367.Рассчитайте два палиндром числа

Я знаю, как проверить, является ли число палиндром. Но я должен создать два палиндрома, и это немного отличается, и я не могу найти ответ.

Пожалуйста, перед тем, как остановиться, я парень в программировании, который хочет что-то узнать, я уже пытался решить проблему и много искал.

Вот мой код, чтобы проверить, если число палиндром:

#include <stdio.h> 
int main() 
{ 
    int num, reverse_num=0, remainder,temp; 
    printf("Enter an integer: "); 
    scanf("%d", &num); 
    temp=num; 
    while(temp!=0) 
    { 
     remainder=temp%10; 
     reverse_num=reverse_num*10+remainder; 
     temp/=10; 
    } 
    if(reverse_num==num) 
     printf("%d is a palindrome number",num); 
    else 
     printf("%d is not a palindrome number",num); 
    return 0; 
} 
+1

Подсказка: если число является уже палиндром, только один действительный палиндром может быть сделано из нее: напр. '121 -> 121121', как вы просите. Итак, вы уже на полпути. (-: – user3078414

+1

Легче сначала преобразовать число в строку, а затем манипулировать им – stackptr

+2

@ user3078414: уже предлагаемый на полпути, я предлагаю другую половину. Если входной номер не является палиндром, тогда отмените число. у вас есть два номера оригинала и обратный, теперь просто распечатайте их вместе. Первый оригинал и обратный, а затем обратный и оригинальный. – user1336087

ответ

1

Ваш код уже имеет как num и reverse_num. Все, что вам нужно сделать, это распечатать их один за другим в своем заявлении if else. Это для «мгновенного удовлетворения».

if(reverse_num==num) { 
    printf("palindrome1 = palindrome2 = %d%d\n", num, num); 
}else{ 
    printf("palindrome1 = %d%d\n",num, reverse_num); 
    printf("palindrome2 = %d%d\n",reverse_num, num); 
} 

Если вы действительно хотите, чтобы вычислить палиндромов как фактические целых вместо этого, это просто еще несколько строк кода. Добавьте один счетчика для отслеживания десятичных разрядов при вычислении reverse_num ... Мы можем легко разместить код здесь, но это хорошего и простое упражнение в изучении C, и вы получите гораздо больше, если бы вы сделай сам.

Конечно, есть другие способы достижения результата, как предлагает другой ответ и комментарии. Этот ответ основан на вводе кода.

Пожалуйста, также известно, что количество формы a*10^n, или в более общем случае … + 0*10^0 может привести к некоторым «удивительно перспективных» палиндромов, по крайней мере, в плане того, как они определены в ОП.

1

Здесь вы находитесь.

#include <stdio.h> 

struct palindrome_pair 
{ 
    unsigned long long int first; 
    unsigned long long int second; 
}; 

struct palindrome_pair build_palindrome(unsigned int x) 
{ 
    const unsigned int Base = 10; 
    struct palindrome_pair palindrome = { x, 1 }; 

    unsigned int y = 0; 

    for (unsigned int value = x; value != 0; value /= Base) 
    { 
     y = Base * y + value % Base; 

     palindrome.first *= Base; 
     palindrome.second *= Base; 
    } 

    palindrome.first += y; 
    palindrome.second = palindrome.second * y + x; 

    return palindrome; 
} 

int main(void) 
{ 
    unsigned int x = 367u; 

    struct palindrome_pair palindrome = build_palindrome(x); 

    printf("%u:\t%llu\t%llu\n\n", x, palindrome.first, palindrome.second); 

    const unsigned int N = 20; 

    for (unsigned int i = 0; i <= N; i++) 
    { 
     palindrome = build_palindrome(i); 

     printf("%u:\t%llu\t%llu\n", i, palindrome.first, palindrome.second); 
    } 

    return 0; 
} 

Выход программы

367: 367763 763367 

0: 0 0 
1: 11 11 
2: 22 22 
3: 33 33 
4: 44 44 
5: 55 55 
6: 66 66 
7: 77 77 
8: 88 88 
9: 99 99 
10: 1001 110 
11: 1111 1111 
12: 1221 2112 
13: 1331 3113 
14: 1441 4114 
15: 1551 5115 
16: 1661 6116 
17: 1771 7117 
18: 1881 8118 
19: 1991 9119 
20: 2002 220 
+0

Хорошее арифметическое решение, которое хорошо работает для всех, но некое большое' unsigned'. – chux

+0

110 и 220 не являются палиндромами. Вы должны проверить нулевые нули и либо добавить ведущие нули, либо оставить эти записи. – hymie

+0

@hymie Это зависит от вас, как вы собираетесь генерировать числа. –