elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Separar un numero de 16 digitos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Separar un numero de 16 digitos  (Leído 2,574 veces)
Miguelito

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Separar un numero de 16 digitos
« en: 4 Mayo 2019, 19:11 pm »

Buenas a todos, tengo un dilema con una tarea en la cual me piden ingresar un numero que puede estar entre 13 y 16 digitos el cual tengo que separar sus digitos e ingresarlos a una matriz, luego tengo que multiplicar por 2 los digitos separados empezando desde el penultimo digito y saltandome de a dos.

ej: 1234567891234567
     1  2  3  4  5  6  7  8  9  1  2  3  4  5  6  7
     2  2  6  4 10 6 14 8 18 1   4  3  8  5 12 7

y luego sumarlos.
Mi duda es que si ingreso un numero menor a 16 digitos los ultimos digitos quedaran en 0 y no se como ubicarme en el penultimo digito.

ej: 1234567891234
     1  2  3  4  5  6  7  8  9  1  2  3  4  0  0  0
     2  2  6  4 10 6 14 8 18  1  4  3  8  0  0  0
en este caso empieza a multiplicar desde el ultimo termino, como hago para que omita los primeros 0?


Código:
#include<stdio.h>
int main () {
char digit[16];
int i, j;
for(i=0; i<=15; i++){
digit[i]=0;
}
printf("Ingrese el numero de tarjeta: ");
scanf("%s", digit);

for(i=0; i<=15; i++){
                 printf("%c\n", digit[i]);
}
return 0;
}


« Última modificación: 4 Mayo 2019, 19:13 pm por Miguelito » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Separar un numero de 16 digitos
« Respuesta #1 en: 4 Mayo 2019, 19:24 pm »

Hay muchas formas de resolver esto, yo te voy a comentar una posible solución.
Te recomiendo leer el número en una variable de tipo <long long> porque en un <int> no cabe un número de 16 dígitos y después ir guardando cada dígito en un array ya que tal como lo haces en esa cadena podrías escribir cualquier cosa y tener problemas en la ejecución.
Además separar un número en dígitos es un problema muy común cuando empiezas en programación y que viene bien que lo practiques ya que es muy útil.
Una vez guardado el número, si creas un array de memoria estática de tamaño 16 siempre (quiero decir, que no usas memoria dinámica) empieza a guardar los dígitos por el final y así podrás localizar siempre la penúltima posición ya que los 0 estarán al principio, no al final.

Suerte :-X


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Miguelito

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Separar un numero de 16 digitos
« Respuesta #2 en: 4 Mayo 2019, 23:42 pm »

Hay muchas formas de resolver esto, yo te voy a comentar una posible solución.
Te recomiendo leer el número en una variable de tipo <long long> porque en un <int> no cabe un número de 16 dígitos y después ir guardando cada dígito en un array ya que tal como lo haces en esa cadena podrías escribir cualquier cosa y tener problemas en la ejecución.
Además separar un número en dígitos es un problema muy común cuando empiezas en programación y que viene bien que lo practiques ya que es muy útil.
Una vez guardado el número, si creas un array de memoria estática de tamaño 16 siempre (quiero decir, que no usas memoria dinámica) empieza a guardar los dígitos por el final y así podrás localizar siempre la penúltima posición ya que los 0 estarán al principio, no al final.

Suerte :-X

Gracias, tenia problemas con el long por que no usaba el %ld en el scanf solamente ponia %d por eso habia abandonado ese metodo pero ya lo logre.
Todavia no termino el programa pero lo dejare por aqui por si alguien le puede servir.

Código
  1. #include<stdio.h>
  2. int main (){
  3. long long int num;
  4. int i, c, n;
  5. int mat[16];
  6.  
  7. printf("Ingrese su numero de tarjeta: ");
  8. scanf("%lld", &num);
  9. // printf("%lld", num);
  10.  
  11. for(i=15; i>=0; i--){
  12. printf("num entrada %lld\n", num);
  13. n = num%10;
  14. printf("el numero es: %d \n", n);
  15. mat[i] = n;
  16. num = num - n;
  17. num = num/10;
  18. printf("num salida %lld\n", num);
  19. }
  20.  
  21. for (i=0; i<=15; i++){
  22. printf("%d", mat[i]);
  23. }
  24. }
En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Separar un numero de 16 digitos
« Respuesta #3 en: 5 Mayo 2019, 01:58 am »

Ese código se puede optimizar un poco. Te dejo aquí un código que guarda cada dígito en una posición del array.
Como estamos usando números enteros, no hace falta restarle la última cifra al número ya que el operador de división / realiza una división entre enteros por lo que obvia los decimales.
Además es recomendable que uses nombres de variables que expliquen mejor su uso.
Código
  1. int main(){
  2.    int digitos[MAX_CIFRAS] = {0};
  3.    long long numero;
  4.    for(size_t i = MAX_CIFRAS-1; i >= 0; --i){
  5.        digitos[i] = numero%10;
  6.        numero /= 10;
  7.    }
  8. }
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Separar digitos de un numero
Programación C/C++
vaXy 6 36,031 Último mensaje 1 Diciembre 2012, 16:17 pm
por cypascal
Funcion Separar Digitos de un numero
Programación C/C++
Ja_90 3 6,866 Último mensaje 1 Octubre 2015, 01:21 am
por 0xFer
¿Cómo separar un numero binario en digitos?
Programación C/C++
Sherboc 7 9,215 Último mensaje 24 Junio 2016, 02:30 am
por AlbertoBSD
Separar digitos.
Programación C/C++
grossgore 1 1,994 Último mensaje 15 Febrero 2017, 01:16 am
por engel lex
Separar los dígitos impares de un numero con guion
Programación C/C++
dpn 2 3,776 Último mensaje 20 Agosto 2021, 21:02 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines