C: comment séparer un nombre à plusieurs chiffres en variables distinctes?

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

123 serait à son tour tenu 1, 2, et 3.

Comment puis-je faire cela, surtout si Je ne sais pas combien de chiffres l'entier a?

21
demandé sur MD XF 2012-02-16 02:46:51

11 réponses

int value = 123;
while (value > 0) {
 int digit = value % 10;
 // do something with digit
 value /= 10;
}
28
répondu Tony 2012-02-15 22:52:02

Tout d'abord, comptez 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;
}
7
répondu asaelr 2012-02-15 22:55:06

Comme indice, obtenir le nième chiffre dans le 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;
}
2
répondu Dave 2012-02-15 22:51:38

Les derniers chiffres de 123 sont 123% 10. Vous pouvez supprimer le dernier chiffre de 123 en faisant 123/10 -- en utilisant la division entière cela vous donnera 12. Pour répondre à votre question sur " Comment puis-je savoir combien de chiffres vous avez" -- essayez de le faire, comme décrit ci-dessus et vous verrez comment savoir quand s'arrêter.

0
répondu MK. 2012-02-15 22:53:16

Je pense que ci-dessous 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;
}
0
répondu Atul Khanduri 2013-11-01 16:31:44

, Nous pouvons utiliser ce programme comme une fonction avec 3 arguments.Ici, dans "while(a++

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;}
0
répondu Siddarth Sid 2016-02-25 16:29:32
//Based on Tony's answer
#include <stdio.h> 
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));
}

Il en résulte l'impression suivante:

Centaines = 9

Dizaines = 8

Unités = 7

0
répondu Rupert Russell 2017-04-18 00:58:56

Je l'ai fait en fonction du code de @ asaelr:

typedef struct digitsArrayPlusNumber {
    uint32_t *baseAddress;
    uint32_t number;
} digitsArrayPlusNumber;

digitsArrayPlusNumber *splitDigits (uint32_t inValue) {
    // based on code from asaelr@stackoverflow.com

    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 assez bien, merci!

0
répondu Laserbeak 2017-06-17 19:48:37

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

//Separate number digits
#include <stdio.h>
#include <math.h>

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);
}
0
répondu Ahmad Kandil 2017-09-15 17:42:47

Vous pouvez utiliser %10, ce qui signifie le reste si le nombre après l'avoir divisé. Donc 123 % 10 est 3, parce que le reste est 3, soustrayez le 3 de 123, alors il est 120, puis divisez 120 avec 10 qui est 12. Et faites le même processus.

0
répondu 2017-12-21 21:22:40

Vous pouvez diviser et conquérir mais vous avez réécrit 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

-1
répondu Develooper 2017-09-16 01:28:40