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--;
}
}
3 Réponses :
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 */
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.
#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;
}
#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;
}
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.)
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