Duda

Iniciado por SojatDotar, 24 Mayo 2015, 03:54 AM

0 Miembros y 2 Visitantes están viendo este tema.

SojatDotar

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

crack81

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

Código (cpp) [Seleccionar]
#include<iostream>
using namespace std;

int main(){

   long long int x=1234567891234567;

   if(x>=1000000000000000 || x<=9999999999999999){
       cout<<"solo posee 16 digitos"<<endl;
   }
   else{
       cout<<"No posee 16 digitos"<<endl;
       }


cin.get();
cin.get();
return 0;
}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

DarK_FirefoX

Cita de: SojatDotar en 24 Mayo 2015, 03:54 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?

Peregring-lk

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

Eternal Idol

Cita de: Peregring-lk en 24 Mayo 2015, 23:02 PM
Bueno, es bastante obvio, viendo las dos primeras líneas del programa, que está programando en C++.

SojatDotar no publico nada de codigo.
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

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 #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)

0xFer

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

Código (cpp) [Seleccionar]

cout << "Ingrese número de 16 digito -> ";
 
string num16;
cin >> num16;
 
if( num16.length() == 16){
   //Número correcto
}
else{
  //Número incorrecto
}



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 (cpp) [Seleccionar]

 if( (  num[0] * num[1] * num[2] * num[3]    ) == 6497400 ){
     //No se repite ningún digito
 }



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

Código (cpp) [Seleccionar]

 if( (  num[4] * num[5] * num[6] * num[7]    ) == 6497400 ){
     //No se repite ningún digito
 }




Luego si quieres imprimir el sodoku:

Código (cpp) [Seleccionar]

  for(int i = 0; i < 16;i++){
      if( i%4==0)
          cout endl;
      num[i];
 }

lo que imprime es una matriz 4x4

Editado
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

SojatDotar

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

0xFer

#8
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 (cpp) [Seleccionar]

  if( num[0] == num[1] or num[0] == num[2] or num[0] == num[3] ){
      //se repite el número num[0]
  }
  else if( num[1] == num[2] or num[1] == num[3] ){
     //ser repite el número num[1]
  }
  else if( num[2] == num[3] ){
     //ser repite el número num[2]
  }
  else{
     //todo bien
  }



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
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

DarK_FirefoX

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 (cpp) [Seleccionar]
int cantDigitos(unsigned long long int number)
{
int cont = 1;
if (number / 10 == 0)
return 1; //Si el número entre 10 es 0, entonces tiene un dígito
       //Se realiza la misma operación mientras incrementas el contador
while (number / 10 > 0)
{
cont++;
number = number / 10;
}
return cont;
}


Ej: Para una entrada

Código (cpp) [Seleccionar]
unsigned long long int var = 12345678123456789;

Obtienes:

Citar17

Espero, esto te ayude.

Salu2s