Как переместить первую цифру в последнюю позицию числа в C - PullRequest
0 голосов
/ 01 октября 2019

Для примера возьмем число 123. Как бы я переместил 1, чтобы результирующее число было 231?

unsigned long int N;
scanf("%lu", &N);
unsigned long int firstDigit;
while (N >= 10)
{  
  N /= 10;
  firstDigit = N;
  count++;
}

У меня есть этот код, чтобы определить первую цифру, но теперь я не знаю, как ее переместить.

Ответы [ 3 ]

1 голос
/ 01 октября 2019

какое значение переменной после выполнения: -

....................... ans ...... pow. ........... N
(до цикла) ...... 0 ........... 1 ...... 1234
(условие)
1234>9 .............. 4 ......... 10 ........ 123
123>9 ... ........... 34 ........ 100 ......... 12
12>9 ............. .234 ...... 1000 ........... 1
1>9
(зацикливание)
ans = ans*10 + N = (234)*10 + 1 = 2341

unsigned long int N;
scanf("%lu", &N); //N=1234
unsigned long int ans=0;
unsigned long int pow=1;
while (N>9){
    ans += pow * (N%10);
    pow *= 10;
    N /= 10;
}  //ans=234  N=1
ans = ans*10 + N ;
0 голосов
/ 01 октября 2019

Как насчет другого взгляда. Рассмотрим со строковой операцией.

#include <stdio.h>
  int main()
  {
     char i[10]="";
     scanf ("%s", &i);
     for (int j = 1; i[j] != NULL; j++)
      printf ("%c",i[j]);
      printf ("%c\n",i[0]);
     return 0;
  }

Надеюсь, эта помощь:)

0 голосов
/ 01 октября 2019

Предположим N = 546 и получено firstDigit = 5. Таким образом, чтобы переместить firstDigit в последнюю позицию первым, вы должны удалить firstDigit из N . Если count = number of digits of N, то N - (firstDigit * 10^(count-1)) даст номер без firstDigit. Для N = 546 вы получите removedFirstDigit = 46. Тогда вам просто нужно прикрепить firstDigit к последней позиции, используя 10 * removedFirstDigit + firstDigit, чтобы получить окончательный ответ. Следуйте этому коду для лучшего понимания,

unsigned long int N;
scanf("%lu", &N);
unsigned long int value = N;
unsigned long int firstDigit;
int count = 0;
while (N >= 10)
{  
  N /= 10;
  firstDigit = N;
  count++;
}

unsigned long int powerOfTen = 1;
for(int i=1; i<=count; i++) {
    powerOfTen *= 10;
}

unsigned long int removedFirstDigit = value - (firstDigit * powerOfTen);
unsigned long int ans = 10 * removedFirstDigit + firstDigit;

printf("%lu", ans);

Вы также можете решить эту проблему, преобразовав число в строку и просто переместив первый символ в последнюю позицию.

...