C: comment diviser un nombre à plusieurs chiffres en variables distinctes?

Disons que j’ai un nombre entier à plusieurs chiffres en C. Je veux le diviser en nombres entiers à un chiffre.

123 se transformerait en 1 , 2 et 3 .

Comment puis-je faire cela, surtout si je ne sais pas combien de chiffres le nombre entier a?

 int value = 123; while (value > 0) { int digit = value % 10; // do something with digit value /= 10; } 

Commencez par compter les chiffres:

 unsigned int count(unsigned int i) { unsigned int ret=1; while (i/=10) ret++; return ret; } 

Ensuite, vous pouvez les stocker dans un tableau:

 unsigned int num=123; //for example unsigned int dig=count(num); char arr[dig]; while (dig--) { arr[dig]=num%10; num/=10; } 

Comme indice, obtenir le nième chiffre du nombre est assez facile; diviser par 10 n fois, puis mod 10, ou en C:

 int nthdig(int n, int k){ while(n--) k/=10; return k%10; } 

Les derniers chiffres de 123 correspondent à 123% 10. Vous pouvez supprimer le dernier chiffre de 123 en faisant 123/10 – en utilisant la division entière, cela vous donnera 12. Répondez à votre question sur “comment savoir combien de chiffres vous avez” – essayez de le faire comme décrit ci-dessus et vous verrez comment savoir quand vous arrêter.

Je pense que ci-dessous un morceau de code aidera …

 temp = num; while(temp) { temp=temp/10; factor = factor*10; } printf("\n%d\n", factor); printf("Each digits of given number are:\n"); while(factor>1) { factor = factor/10; printf("%d\t",num/factor); i++; num = num % factor; } 

nous pouvons utiliser ce programme comme une fonction avec 3 arguments. Ici, dans “while (a ++ <2)", 2 est le nombre de chiffres dont vous avez besoin (vous pouvez donner un argument), remplacez 2 par aucun des chiffres dont vous avez besoin. Ici, nous pouvons utiliser "z / = pow (10,6)" si nous n’avons pas besoin de certains derniers chiffres, remplacez 6 par le nombre de chiffres dont vous n’avez pas besoin (peut être un autre argument), et le troisième argument est le nombre que vous avez besoin de casser.

 int main(){ long signed c=0,z,a=0,b=1,d=1; scanf("%ld",&z); while(a++<2){ if(d++==1) z/=pow(10,6); c+=(z%10)*b; z/=10; b*=10;} return c;} 
 //Based on Tony's answer #include  int nthdig(int n, int k){ while(n--) k/=10; return k%10; } int main() { int numberToSplit = 987; printf("Hundreds = %i\n",nthdig(2, numberToSplit)); printf("Tens = %i\n",nthdig(1, numberToSplit)); printf("Units = %i\n",nthdig(0, numberToSplit)); } 

Cela donne l’impression suivante:

Des centaines = 9

Tens = 8

Unités = 7

Je l’ai fait sur la base du code de @asaelr:

 typedef struct digitsArrayPlusNumber { uint32_t *baseAddress; uint32_t number; } digitsArrayPlusNumber; digitsArrayPlusNumber *splitDigits (uint32_t inValue) { // based on code from [email protected] uint32_t inputValue = inValue; //Count digits uint32_t theCount = 1; while (inputValue /= 10) theCount++; // put in array uint32_t *arr = malloc(sizeof(uint32_t) * theCount); uint32_t dig = theCount; while (dig--) { arr[dig]=inValue % 10; inValue /= 10; // printf ("%d\n", arr[dig]); } digitsArrayPlusNumber *dandn = malloc (sizeof(digitsArrayPlusNumber)); dandn->baseAddress = arr; dandn->number = theCount; return dandn; } int main(int argc, const char * argv[]) { for (int d = 0; d < splitDigits(12345678)->number; d++) printf ("%u\n", (splitDigits(12345678)->baseAddress)[d]); } 

Cela fonctionne très bien, merci!

Essayez ce code si vous souhaitez séparer les chiffres dans le même ordre sans utiliser de tableaux.

 //Separate number digits #include  #include  void main() { int x, y, n = 0; scanf("%d", &x); //counting digits y = x; while (y != 0) { n += 1; y /= 10; } //printing separated digits int i; for (i = ceil(pow(10, (n - 1))); i != 0; i /= 10) printf("%d ", (x / i) % 10); } 

Vous pouvez utiliser% 10, ce qui signifie le rest si le nombre après que vous l’avez divisé. Donc, 123 % 10 est 3, parce que le rest est 3, soustrayez le 3 de 123, puis c’est 120, divisez ensuite 120 avec 10 qui est 12. Et faites le même processus.

Vous pouvez diviser et conquérir mais vous devez réécrire toutes les bibliothèques arithmétiques. Je suggère d’utiliser une bibliothèque multi-précision https://gmplib.org Mais bien sûr, c’est une bonne pratique