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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Duda
« en: 24 Mayo 2015, 03:54 am »

Buenas, como verifico que un número tenga 16 digitos? solo utilizando if, else o swicth


En línea

crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Duda
« Respuesta #1 en: 24 Mayo 2015, 05:13 am »

Una de las formas mas sencillas de hacerlo es haciendo lo siguiente

Código
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int main(){
  5.  
  6.   long long int x=1234567891234567;
  7.  
  8.   if(x>=1000000000000000 || x<=9999999999999999){
  9.       cout<<"solo posee 16 digitos"<<endl;
  10.   }
  11.   else{
  12.       cout<<"No posee 16 digitos"<<endl;
  13.       }
  14.  
  15.  
  16. cin.get();
  17. cin.get();
  18. return 0;
  19. }


En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Duda
« Respuesta #2 en: 24 Mayo 2015, 08:47 am »

Buenas, como verifico que un número tenga 16 digitos? solo utilizando if, else o swicth

1- El nombre de tu tema no brinda ninguna información con respecto a lo que quieres preguntar. Deberías leerte las reglas del foro.

2 - No se resuelven ejercicios. Si esa es tu duda, sería bueno que plantearas que has hecho o pensado y desde allí te podríamos ayudar.

3 - No especificas en que lenguaje estás trabajando (C o C++)

Ahora, en que tipo de dato te entran el número?
En línea

Peregring-lk

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Duda
« Respuesta #3 en: 24 Mayo 2015, 23:02 pm »

Bueno, es bastante obvio, viendo las dos primeras líneas del programa, que está programando en C++.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Duda
« Respuesta #4 en: 25 Mayo 2015, 00:06 am »

Bueno, es bastante obvio, viendo las dos primeras líneas del programa, que está programando en C++.

SojatDotar no publico nada de codigo.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: Duda
« Respuesta #5 en: 25 Mayo 2015, 00:45 am »

Buenas podrían ayudarme en este código tengo que hacer un sudoku en c++ ( con solo if, else y swicth) por fases la primera consiste en verificar que la cadena ( entero de 16 digitos) cumpla que tenga 16 digitos y que no se pase, luego que los número esten comprendidos entre 1 y 4, luego verificar que no haya número repetido en los cuadrantes, filas y columnas, tengo este código
Código:
#include <iostream>
using namespace std;

int main () {


int a,b,c,d,e,f,a11,a12,a13,a14,b11,b12,b13,b14,c11,c12,c13,c14,d11,d12,d13,d14;
unsigned long long int x;
cout<<"introduzca la cadena"<<endl;
cin>>x;



    a=x/100000000;
b=x%100000000;
c=a/10000;
d=a%10000;
e=b/10000;
f=b%10000;
a11=c/1000;
c=c%1000;
a12=c/100;
c=c%100;
a13=c/10;
a14=c%10;
b11=d/1000;
d=d%1000;
b12=d/100;
d=d%100;
b13=d/10;
b14=d%10;
c11=e/1000;
e=e%1000;
c12=e/100;
e=e%100;
c13=e/10;
c14=e%10;
d11=f/1000;
f=f%1000;
d12=f/100;
f=f%100;
d13=f/10;
d14=f%10;


if ((x/100000000000000000)==0){
cout<<"Entrada incorrecta la cadena  debe contener 16 digitos"<<endl;}
else
{cout<<"solucion valida"<<endl;



if (((a11!=1) and (a11!=2)  and (a11!=3)  and (a11!=4))  or
((a12!=1) and (a12!=2)  and (a12!=3)  and (a12!=4))  or
((a13!=1) and  (a13!=2) and (a13!=3)  and (a13!=4))  or 
((a14!=1) and  (a14!=2) and  (a14!=3) and (a14!=4))  or
((b11!=1) and  (b11!=2) and  (b11!=3) and (b11!=4))  or 
((b12!=1) and  (b12!=2) and  (b12!=3) and (b12!=4))  or 
((b13!=1) and ( b13!=2) and  (b13!=3) and (b13!=4))  or 
((b14!=1) and  (b14!=2) and  (b14!=3) and (b14!=4))  or 
((c11!=1) and  (c11!=2) and  (c11!=3) and (c11!=4))  or 
((c12!=1) and  (c12!=2) and  (c12!=3) and (c12!=4))  or 
((c13!=1) and  (c13!=2) and  (c13!=3) and (c13!=4))  or 
((c14!=1) and  (c14!=2) and (c14!=3)  and (c14!=4))  or
((d11!=1) and  (d11!=2) and  (d11!=3) and (d11!=4))  or
((d12!=1) and (d12!=2)  and (d12!=3)  and (d12!=4))  or 
((d13!=1) and  (d13!=2) and (d13!=3)  and (d13!=4))  or 
((d14!=1) and  (d14!=2) and  (d14!=3) and (d14!=4))){
        cout<<"Entrada incorrecta, la cadena solo debe poseer digitos entre 1 y 4 "<<endl;}


else {
cout<<"Solucion valida"<<endl;}
}

if ((a11 == a12) and
(a11 == b11) and
(a11 == b12) and
(a12 == b11) and
(a12 == b12) and
(b11 ==b12) ) {
                     cout<<"error en el cuadrante C1"<<endl;}
                     
                     
               if  ((a13==a14)  and
(a13==b13) and
(a13==b14) and
(a14==b13) and
(a14==b14) and
(b13==b14)) {
cout<<" error en el cuadrante C2"<<endl;
}


if ((c11==c12) and
(c11==d11) and
(c11==d12) and
(c12==d11) and
(c12==d12) and
(d11==d12)) {
cout<<"error en el cuadrante C3"<<endl;
}



if ((c13==c14)and
(c13==d13) and
(c13==d14) and
(c14==d13) and
(c14==d14) and
(d13==d14)) {
cout<<"error en el cuadrante C4"<<endl;
}

if ((a11==a12) and
(a11==a13) and
(a11==a14)) {
   cout<<"error en la fila 1"<<endl;}
   
   
if ((b11==b12)    and
(b11==b13)   and
(b11==b14)) {
   cout<<"error en la fila 2"<<endl;}
   
if((c11==c12) and
(c11==c13) and
(c11==c14)) {
   cout<<"error en la fila 3"<<endl;}
   
if((d11==d12) and
(d11==d13) and
(d11==d14)) {
cout<<"error en la fila 4"<<endl;}

if (( a11==b11) and
(a11==c11) and
(a11==d11)) {
cout<<"error en la columna 1"<<endl;}

if ((a12==b12) and
(a12==c12) and
(a12==d12)) {
cout<<"error en la columna 2"<<endl;}

if((a13==b13) and
(a13==c13) and
(a13==d13))  {
cout<<"error en la columna 3"<<endl;}

if ((a14==b14) and
(a14==c14) and
(a14==d14)) {
cout<<"error en la columna 4"<<endl;}

}
pero cuando ingreso la cadena válida:1234432134122143, me dice entrada valida que la cadena debe poseer número entre 1 y 4, y cuando ingreso la invalida (cadena invalida:123432132222133) no me informa sobre los errores, quisiera saber si pueden echarle un vistazo y informarme sobre los errores, por favor ( cuadrante valido http://prntscr.com/78zmcs)
En línea

0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Duda
« Respuesta #6 en: 25 Mayo 2015, 01:29 am »

Para pedir la cadena de 16 dígitos puedes hacer ésto:

Código
  1. cout << "Ingrese número de 16 digito -> ";
  2.  
  3. string num16;
  4. cin >> num16;
  5.  
  6. if( num16.length() == 16){
  7.    //Número correcto
  8. }
  9. else{
  10.   //Número incorrecto
  11. }
  12.  
  13.  

Ahora pongamos que queremos saber si en la primera fila hay algún número que se repita:

Como se supone que a fuerzas tienen que ser diferentes, entonces convertimos char a int,
'1' = 49
'2' = 50
'3' = 51
'4' = 52

Al multiplicar el resultado es igual a 6 497 400, entonces lo comprobamos así
Código
  1.  if( (  num[0] * num[1] * num[2] * num[3]    ) == 6497400 ){
  2.      //No se repite ningún digito
  3.  }
  4.  
  5.  

lo mismo haces para las demás filas y columnas, para la segunda fila sería así:

Código
  1.  if( (  num[4] * num[5] * num[6] * num[7]    ) == 6497400 ){
  2.      //No se repite ningún digito
  3.  }
  4.  
  5.  


Luego si quieres imprimir el sodoku:

Código
  1.   for(int i = 0; i < 16;i++){
  2.       if( i%4==0)
  3.           cout endl;
  4.       num[i];
  5.  }
  6.  
lo que imprime es una matriz 4x4

Editado
« Última modificación: 25 Mayo 2015, 01:39 am por 0xFer » En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: Duda
« Respuesta #7 en: 25 Mayo 2015, 01:43 am »

Yo lo que hice a principio, fue descomponer el número en dígitos, luego, verifique con un if que no ingren número que no esten entre 1 y 4, pero ahora lo de la columnas y fila, me llamo la atención que pusiste, pensaba poner if (num1==num2) que me imprimera el error ejemplo columna 1, pero me piden, me muestre en donde esta el error, ( sea fila, columna o cuadrante) y el número que se repite, no se como poner eso, cuál es el número que se repite
En línea

0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Duda
« Respuesta #8 en: 25 Mayo 2015, 01:51 am »

Teniendo en cuenta que los dígitos en el ejemplo que te mostré son, en realidad caracteres, entonces para saber si uno se repite sería así:

Código
  1.   if( num[0] == num[1] or num[0] == num[2] or num[0] == num[3] ){
  2.       //se repite el número num[0]
  3.   }
  4.   else if( num[1] == num[2] or num[1] == num[3] ){
  5.      //ser repite el número num[1]
  6.   }
  7.   else if( num[2] == num[3] ){
  8.      //ser repite el número num[2]
  9.   }
  10.   else{
  11.      //todo bien
  12.   }
  13.  
  14.  

en tu código sería con num1,num2 y así

Luego puedes hacer una subrutina que haga la comprobación a partir de 4 indices
« Última modificación: 25 Mayo 2015, 01:54 am por 0xFer » En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
DarK_FirefoX


Desconectado Desconectado

Mensajes: 1.263


Be the change you wanna see in te world


Ver Perfil
Re: Duda
« Respuesta #9 en: 25 Mayo 2015, 02:36 am »

Hola! al final no estoy seguro si cambiaste a manejar la "cadena" como un string, pero voy a responder tu pregunta original.

Puedes usar el siguiente método para ver que cantidad de dígitos tiene un número.

Código
  1. int cantDigitos(unsigned long long int number)
  2. {
  3. int cont = 1;
  4. if (number / 10 == 0)
  5. return 1; //Si el número entre 10 es 0, entonces tiene un dígito
  6.       //Se realiza la misma operación mientras incrementas el contador
  7. while (number / 10 > 0)
  8. {
  9. cont++;
  10. number = number / 10;
  11. }
  12. return cont;
  13. }

Ej: Para una entrada

Código
  1. unsigned long long int var = 12345678123456789;

Obtienes:

Citar
17

Espero, esto te ayude.

Salu2s
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 9,738 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
Duda duda y duda de Metasploit
Bugs y Exploits
huber_nomas 4 5,775 Último mensaje 17 Febrero 2012, 14:00 pm
por MauroMasciar
Duda facil, [VIDEO QUE EXPLICA MI DUDA]
Diseño Gráfico
Ngeooz 6 8,841 Último mensaje 2 Diciembre 2013, 19:33 pm
por Ngeooz
[DUDA] Cambiar letra de unidad a archivo con un Batch [DUDA] « 1 2 »
Windows
MrMaticool 10 11,280 Último mensaje 12 Febrero 2014, 17:55 pm
por MrMaticool
[DUDA][LICENCIA][GPL]tengo una duda sobre las caracteristicas de la licencia GPL
Dudas Generales
Noxware 0 1,862 Último mensaje 2 Mayo 2014, 00:34 am
por Noxware
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines