c программа для переворачивания цифр - PullRequest
1 голос
/ 28 февраля 2010

Я ищу программу C для перестановки цифр, как показано ниже:

Если я введу:

123456

Тогда результат будет:

654321

Пожалуйста, помогите мне.

Ответы [ 8 ]

11 голосов
/ 28 февраля 2010

Вот простое решение этой сложной проблемы:

#include <stdio.h>

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    }
}


Новая версия, которая выводит новую строку:
#include <stdio.h>
#include <stdlib.h>

static void newline(void)
{
    printf("\n");
}

int main()
{
    int ch;
    ch = getchar();
    if (ch != '\n') {
        main();
        printf("%c", ch);
    } else {
        atexit(newline);
    }
}
7 голосов
/ 28 февраля 2010

Если ваш профессор оценивает вас по производительности, попробуйте решение ggf31416 этой проблемы в другом вопросе:

int FastReverse(int num) {
    int res = 0;
    int q = (int)((214748365L * num) >> 31);
    int rm = num - 10 * q;
    num = q;
    if (rm == 0) return -1;
    res = res * 10 + rm;
    while (num > 0) {
       q = (int)((214748365L * num) >> 31);
       rm = num - 10 * q;
       num = q;
       res = res * 10 + rm;
    }
    return res;
}

Оптимизация & рег;

Когда это абсолютно положительно должно быть сделано в эту наносекунду.

5 голосов
/ 28 февраля 2010

Используйте % 10, чтобы получить последнюю цифру. Выведите это. Разделите число на 10, чтобы получить все, кроме последней цифры. Используйте % 10, чтобы получить последнюю цифру этого. И так до тех пор, пока число не станет 0.

2 голосов
/ 28 февраля 2010

Вот еще одна возможность. Это нерекурсивный, и, возможно, немного меньше кода. В комментариях к коду есть пример, объясняющий логику.

/*
    Example: input = 12345

    The following table shows the value of input and x
    at the end of iteration i (not in code) of while-loop.
    ----------------------
    i   |   input  |    x
    ----------------------
    0       12345       0
    1        1234       5
    2         123      54
    3          12     543
    4           1    5432
    5           0   54321
    ----------------------
*/
uint32_t
reverseIntegerDigits( uint32_t input )
{
    uint32_t x = 0;

    while( input )
    {
        x = 10 * x + ( input % 10 );
        input = input / 10;
    }

    return x;
}
1 голос
/ 28 февраля 2010

Считайте число в массиве символов A с помощью scanf("%s", A) или, что лучше, с помощью fgets и выведите массив символов в обратном порядке, выводя каждый символ, начиная с strlen(A) - 1 до 0 .

0 голосов
/ 15 июня 2017
  1. подсчитать количество цифр в числе и сохранить в переменной счета
  2. извлечь отдельные цифры в переменной
  3. использовать функцию мощности.

    while(count>=1)
    {
      var = num % 10;
      sum = sum + var * pow(10, count - 1);
      num =num / 10;
      count--;
    }
    
0 голосов
/ 15 декабря 2013

Похоже, очень старая тема. Но я упомянул здесь решения и должен был создать собственное решение после тестирования различных программ, доступных в качестве решения на этом сайте. Я понял, что обработка числа как int не даст нужного обращения цифры, если число заканчивается на ноль (и). Поэтому я решил рассматривать число как строку, а затем поменять цифры. Таким образом, я получаю точную обратную цифру с точки зрения строки, а не математическую, которая отбрасывает нули в начале числа.

#include <stdio.h>
#include <string.h>

main()
{

    char num[20];
    int x=0,slen;

    printf("Enter the number you want to reverse :");
    scanf("%s",num);
    slen=strlen(num);


    char *pointertoarray = &num[slen];

    for (x=slen;x>=0; x--){ printf("%c",*pointertoarray); pointertoarray--; }
    printf("\n");

}
0 голосов
/ 28 февраля 2010

Функция strrev переворачивает строку. Если производительность не является проблемой, то, например, вы можете сделать itoa, затем strrev, затем atoi. Но задача очень проста даже без стррв.

...