Реверс числа с 0 в последней позиции в C - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть этот простой код для обращения целых чисел. Но мне нужно поменять местами номера с нулями для другого проекта. Например, эта программа может конвертировать 32 в 23, но она также конвертирует 3200 в 23. Мне нужно 0, чтобы остаться в ведущем месте. Однако я видел двоичные операции на битовом уровне, которые могут выполнять эту работу, я ищу способ (если таковой имеется) сделать это без использования побитовых операций и сделать его простым.

#include <stdio.h>

int main()
{
    int a, mod = 0, reverse = 0;
    printf("Enter a number:");
    scanf_s("%d", &a);
    while(a!=0)
    {
       mod=a%10;
       reverse = reverse * 10 + mod;
       a=a/10;
    }
       printf("%d", reverse);
       return 0;
}

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Запишите смещение сканирования с помощью "%n" при чтении целого числа.

Используйте ширину текста числа для управления реверсом и печатью.

int main() {
  int a, mod = 0, reverse = 0;
  printf("Enter a number:");
  int n1, n2;
  scanf(" %n%d%n", &n1, &a, &n2);
  int width = n2 - n1;
  while (width-- > 0) {
    mod = a % 10;
    reverse = reverse * 10 + mod;
    a = a / 10;
  }
  printf("%0*d", n2-n1, reverse);
  return 0;
}

Пример

Enter a number:00123
32100

Enter a number:12300
00321

Другие соображения не рассматриваются.

  • знак '+' или '-'.

  • Вход за пределы int Диапазон

  • Обратное число вне диапазона int.

  • Нечисловой ввод.

0 голосов
/ 01 ноября 2018

Я бы хотел использовать немного другой подход. Я бы попросил кого-нибудь сделать отступ для меня, поскольку я использую сотовый телефон для ответа.

# define SIZE 10  
int main ()  
{  
int num= 3200;  
// keep one array of characters to store the reversed digits.  
char reversed_digit[SIZE];  
int i= 0, temp;  
if (num  == 0)  
    reversed_digit[i] = (char) num;  
else. 
{  
    while (num > 0)  
    {  
    temp= num % 10;  
    num= num / 10 ;  
    reversed_digit[i++]= (char) temp;  
    }  
    reversed_digit[i]= '\0';  
}
printf("The reversed digit is: %s ", reversed_digit);  
return 0;  
}
0 голосов
/ 01 ноября 2018

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

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

#define MAX 15

void xor_swap(char *a, char *b) {
    if(a != b) {
        *a ^= *b;
        *b ^= *a;
        *a ^= *b;
    }
}

int main(int argc, char **argv) {
    char buffer[MAX];
    size_t length;

    printf("Enter a number: ");
    fgets(buffer, MAX, stdin);

    //fgets also includes the newline chracter so we get rid of that.
    length = strlen(buffer);
    buffer[length - 1] = '\0';
    length--;

    for(int i = 0; i < length / 2; i++) {
        xor_swap(&buffer[i], &buffer[length - i - 1]);
    }

    printf("buffer: %s\n", buffer);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...