separacion separables resueltos reducibles metodo lineales homogeneas exactas ejercicios edo ecuaciones diferenciales definicion c math numbers digits digit

separables - C: ¿cómo dividir un número de varios dígitos en variables separadas?



edo separacion de variables (11)

Como sugerencia, obtener el número n en el número es bastante fácil; divide por 10 n veces, luego mod 10, o en C:

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

Digamos que tengo un entero de varios dígitos en C. Quiero dividirlo en enteros de un solo dígito.

123 se convertiría en 1 , 2 y 3 .

¿Cómo puedo hacer esto, especialmente si no sé cuántos dígitos tiene el entero?


Creo que debajo del código ayudará ...

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; }


El último dígito de 123 es 123% 10. Puede eliminar el último dígito de 123 haciendo 123/10 - usando división de enteros esto le dará 12. Para responder su pregunta sobre "cómo sé cuántos dígitos tiene" - intente hacerlo como se describe arriba y verá cómo saber cuándo detenerse.


Hice esto basado en el código 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]); }

Funciona bastante bien, gracias!


Intente este código si desea separar los dígitos en el mismo orden sin utilizar matrices.

//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); }


Primero, cuenta los dígitos:

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

Luego, puedes almacenarlos en una matriz:

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


Puede usar% 10, que significa el resto si el número después de dividirlo. Entonces 123 % 10 es 3, porque el resto es 3, resta el 3 de 123, luego es 120, luego divide 120 con 10, que es 12. Y haz el mismo proceso.


Puedes dividir y conquistar, pero has reescrito todas las bibliotecas aritméticas. Sugiero usar una biblioteca de precisión múltiple https://gmplib.org Pero, por supuesto, es una buena práctica


podemos usar este programa como una función con 3 argumentos. Aquí, en "while (a ++ <2)", 2 es el número de dígitos que necesita (puede dar como un solo argumento), reemplace 2 por el número de dígitos que no necesite. Aquí podemos usar "z / = pow (10,6)" si no necesitamos los últimos dígitos determinados, reemplace 6 por el número de dígitos que no necesita (se puede dar como otro argumento), y el tercer argumento es El número que necesitas para romper.

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 <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)); }

Esto da como resultado la siguiente impresión:

Cientos = 9

Decenas = 8

Unidades = 7


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