Buenas, como verifico que un número tenga 16 digitos? solo utilizando if, else o swicth
Una de las formas mas sencillas de hacerlo es haciendo lo siguiente
#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;
}
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?
Bueno, es bastante obvio, viendo las dos primeras líneas del programa, que está programando en C++.
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.
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)
Para pedir la cadena de 16 dígitos puedes hacer ésto:
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í
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í:
if( ( num[4] * num[5] * num[6] * num[7] ) == 6497400 ){
//No se repite ningún digito
}
Luego si quieres imprimir el sodoku:
for(int i = 0; i < 16;i++){
if( i%4==0)
cout endl;
num[i];
}
lo que imprime es una matriz 4x4
Editado
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
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í:
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
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.
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
unsigned long long int var = 12345678123456789;
Obtienes:
Citar17
Espero, esto te ayude.
Salu2s
pero no puedo utilizar, funciones, acciones, ni ciclos, solo if, else y switch, todavía lo mantengo como entero y divido en digitos