1
votes

Déplacement circulaire gauche

Le code contient un mouvement circulaire à droite qui est par exemple le nombre 12345 qui sera 51234 .

la question est de savoir comment faire un mouvement circulaire gauche qui est par exemple 12345 sera 23451 , mon numéro est compris entre 3 chiffres et 10 pas seulement 5 chiffres. Veuillez aider?

Merci.

#include <stdio.h>

int mPow(long n, long b);
long Counts(long);
int main() {
long q;
printf("Please Enter a number \n");
scanf("%ld",&q);
printf("Right Rotate:%ld \n",(q%10)*(mPow(10,Counts(q)-1))+q/10);

return 0;
}
long Counts(long q) {
int count=0;
      while(q!=0) {
               q/=10;
               count++;
}
return count;
}
long mPow(long n,long b) { //n=>Base, b=>power
long ret=1;
while(b!=0) {
        ret = ret*n;
        b--;
 }
 }

c

8 commentaires

Marcel, bienvenue dans StackOverflow. Votre question n'est pas claire quant à ce dont vous avez besoin. Soyez précis et montrez ce que vous avez essayé jusqu'à présent. Veuillez vérifier comment poser une bonne question


Que voulez-vous dire sans tableaux?


La solution impliquera trois choses: prendre le chiffre le plus à droite, tout déplacer vers la droite et ajouter le chiffre à votre numéro. Lequel avez-vous essayé et avec lequel avez-vous des problèmes?


Quelle est la question? Veuillez coder RightRotateDigit (int num) pour moi?


Êtes-vous autorisé à traiter votre entrée sous la forme d'une chaîne plutôt que d'un entier? Cela rendrait cet exercice beaucoup plus simple.


@SumitTrehan je ne peux pas utiliser de tableaux dans mes devoirs, mais ici, idk si c'est utile à utiliser, mais peu importe.


@Govind Parmar je n'ai toujours pas atteint les chaînes, mais ce serait formidable si vous pouviez me montrer comment c'est plus simple. Merci


@ DavidC.Rankin je veux savoir quelle est la différence à faire avec la rotation gauche et la rotation droite j'ai déjà fait la rotation droite. Merci


3 Réponses :


-2
votes

Bonjour, cette logique pourrait vous aider avec votre problème

int r=0,num = 12345;
r = num % 10;
num = num / 10;
num = r * 10000 + num;
/* print num and your answer will be 51234 */


2 commentaires

pourquoi codez-vous en dur la valeur 10000? .. le nombre ne comportera pas toujours 5 chiffres


je donne juste la réponse d'une question particulière. Cette logique s'appelle palandrom. Vous pouvez trouver le code complet en ligne pour votre recherche de palandrom un nombre.



2
votes
#include <stdio.h>  
#include <math.h>

int getdig(int n){          //to get the no of digits in a number
  int count=0;
  while(n%10>0){
    count ++;
    n=n/10;
  }
  return count;
}

int RightRotateDigit(int num) {           //exmpl 12345
  int rightmost=num%10;                    //get the last digit 5
  num=num-rightmost;                       // num is now 12340
  num=num/10;                               //num is now 1234
  int dig=getdig(num)                     //get the no of digits in 1234 i.e 4
  int add=rightmost*pow(10,dig) ;         //5*10000=50000
  num=num+add;                             //num is now 51234
  return num;
}


0 commentaires

3
votes
#include <iostream>
using namespace std;

// steps:
// number example : 12345
// get the first digit : 5
// get the rest number : 1234
// get the number of digit in rest number : 4
// shifted number : rest number + firstDigit x 10^(num of digit)
//                : 1234        + 5          x 10^4
//                : 1234        + 50000 =   51234
int rotateRight(int num) {
    int firstDigit = num % 10;
    int restNumber = num / 10;
    int numberOfDigit = 0;
    int temp = restNumber;
    while (temp != 0) {
        temp /= 10;
        numberOfDigit++;
    }
    return restNumber + firstDigit * pow(10, numberOfDigit);
}

int main() {
    int num = 12345;
    cout << rotateRight(num) << endl;
    return 0;
}

1 commentaires

Veuillez ne pas utiliser using namespace std dans les réponses. C'est une TRES mauvaise habitude. De plus, la question concerne le C et non le C ++, vous pouvez donc aussi bien supprimer cette réponse. (Oui, je sais que la question avait la balise C ++ auparavant. C'est une erreur courante.)