
Un número capicúa es aquél que se lee igual de izquierda a derecha, que de derecha a izquierda. Por ejemplo 22,101, 202, 343, 3443, 12233221,…
Una de las formas de saber si un número es capicúa es pasándolo a una cadena y utilizando el código para detectar si la palabra es un palindromo. Para ello puedes leerte el artículo «Saber si una palabra es un palindromo con Java».
Pero es este caso vamos ha realizarlo mediante operaciones matemáticas. La idea es muy sencilla. Tomaremos el número inicial, le daremos la vuelta y comprobaremos que siguen siendo iguales. En este caso tendremos un número capicúa.
Lo primero será definir nuestro número. Para ello podemos utilizar cualquier tipo de dato nativo: int, double, long,… En nuestro ejemplo vamos a utilizar un long.
long numero = 544333234432333445L;
long falta,numeroInvertido,resto;
Además del número necesitamos otras variables, numero Invertido que almacenará el número dado la vuelta, resto, donde dejaremos los restos de las divisiones y falta, que es la variable con los números que faltan para dar la vuelta.
Inicializamos estas tres variables a 0
while(numero<=0);
falta=numero;
numeroInvertido=0;
resto=0;
Los pasos que hay que dar son los siguientes:
1. Para obtener el último dígito del número lo haremos con el resto de una división entre diez. Es decir, si de 4224 queremos obtener el último dígito haremos la siguiente operación:
4224%10 = 4
En código Java será:
resto=falta%10;
Falta tiene el número del que vamos substrayendo dígitos.
2. Del número original hay que quitarle el último dígito. En este caso utilizamos la división entre 10.
4224/10=422
En código Java será:
falta=falta/10;
3. Habrá que guardar el número substraído. Para ello simplemente lo sumaremos al número que tengamos, multiplicado por 10. En el primer caso lo haremos sobre el 0. Las secuencias para el número 4224 será:
0*10+4=4
4*10+2=42
42*10+2=422
422*10+4=4224
En código Java:
numeroInvertido=numeroInvertido*10+resto;
Todo esto lo repetiremos mientras tengamos algo por analizar. El bucle entero sería el siguiente:
while(falta!=0)
{
resto=falta%10;
numeroInvertido=numeroInvertido*10+resto;
falta=falta/10;
}
Solo nos quedará comprobar si el número original y el invertido son iguales:
if(numeroInvertido==numero)
System.out.println("\nEl numero es capicua\n");
else
System.out.println("\nEl numero no es capicua\n");
Paricio Estrella
que es escondite?
pedro
Un número capicúa es aquel que es leído igual de izquierda a derecha que de derecha a izquierda. Escribir un programa en C que tras una cadena formada por números enteros positivos menores que 10 y que finaliza con cero, utilizando estructuras dinámicas lineales, de como salida 1 si el número es capicúa y 0 en el caso contrario.???
jhontan
ingresar dos numneros enteros e indicar los digitos comunes en ambos numeros
lan
HEY Juan Gonza Santi !
numeroinvertido=0;
numero=0;
entonces cuando se evalua
if(0==0) <— TRUE:
o que seria lo mismo if(numeroinvertido==numero)<—TRUE
Juan Gonza Santi
import java.util.Scanner;
public class ejercicio23414 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner entrada=new Scanner(System.in);
int numero=0, numeroinvertido=0, resto, falta=0, var1=0,var2=0,var3=0,var4=0,var5=0,var6=0;
System.out.println («Ingrese un numero»);
var1= entrada.nextInt ();
if(numeroinvertido==numero)
System.out.println(«\nEl numero es capicua\n»);
else
System.out.println(«\nEl numero no es capicua\n»);
while(falta!=0)
{
resto=falta%10;
numeroinvertido=numeroinvertido*10+resto;
falta=falta/10;
}
Cuando lo corro y pongo un numero que no es capicua me dice que es…. Cual es el error¿ fijense media pila gurises vamo arriba! GRACIAS! ;)
lan
Yo lo hice de esta forma!
class Capicua{
Lectura in = new Lectura();
String aux=null;
String aux1=null;
boolean aux3= true;
void datos(){
System.out.println(«INGRESE UNA CIFRA»);
aux = in.Ingreso();
if(aux.equals(alrevez())){
System.out.println(«ES UN NUMERO CAPICUA»);
}else{
System.out.println(«LOS NUMEROS NO SON CAPICUAS»);
}
}
String alrevez(){
for(int i=aux.length()-1; i>-1; i–){
if(aux3==true){
aux1= Character.toString(aux.charAt(i));
aux3=false;
}else{
aux1 = aux1 + aux.charAt(i);
}
}
return aux1;
}
}
Víctor Cuervo
@lorena,
Está explicado en las primeras líneas del artículo. Capicua es aquél número que puedes leer de la misma forma de izquierda a derecha como de derecha a izquierda.
Por ejemplo el 101.
Espero que te oriente un poco.
lorena
como se plantean no entiendo
lorena
olle noentiendo que son los numeros capicuas
I_guri
disculpen io tengo un problema y no se kmo resolver bueno plantearlo. quisiera si me pudieran ayudar. es que tengo que pedir un numero capicua pero tengo que usar el if else y no se como plantear el codigo.
si me pudieran ayudar se los agradeseria mucho.
Víctor Cuervo
@jeremias gorosito,
El el código fuente del ejemplo simplemente tienes que cambiar el valor de la variable numero y poner tú número. Es decir, algo así…
jeremias gorosito
quisiera saber como es el numero 85676 si es capicua
Víctor Cuervo
@Steven,
Si quieres mándamelo desde el formulario de contacto http://lineadecodigo.com/acerca-de/ y lo podemos publicar en la web.
Muchas gracias.
Steven
Ya hice el problema que me habian dejado, el de un mostrar un numero capicua de 5 digitos. Aquí para aquellos que lo necesiten. Saludos.
=10000 && $num
Steven
Si, lo intenté en el 2do comentario, pero nada. A ver otra vez
$num=4224;
function capicua($dig){
while($num<=0)
{
$falta=$num;
$numinvertido=0;
$resto=0;
}
$resto=$falta%10;
$falta=$falta/10;
$numinvertido=$numinvertido*10+$resto;
while($falta!=0)
{
$resto=$falta%10;
$numinvertido=$numinvertido*10+$resto;
$falta=$falta/10;
}
if($numinvertido==$num){
echo "El numero es capicua";
}else{
echo "El numero no es capicua";
}
}
Víctor Cuervo
@Steven,
De todas maneras en PHP, de forma rápida…
Intentaremos publicarlo en la web.
Víctor Cuervo
@Steven,
Pon el código entre etiquetas <pre>. Si no funciona lo puedes preguntar en nuestro foro http://www.dudasprogramacion.com/forum/php-hypertext-preprocessor
Steven
No salió el código
<?php
$num=4224;
while($num
Steven
Hola ‘Víctor Cuervo’, muy buen aporte. Esto lo quiero poner en práctica en PHP, lo he intentado así, pero no me funciona.
<?php
$num=4224;
while($num
Pero lo deseo con 5 dígitos, ahí es donde crearía una función y luego otro bucle como lo describes en tu comentario anterior. Estoy en lo correcto??
Víctor Cuervo
Perfecto, ya nos contarás tu experiencia. Y si tienes alguna duda ya sabes dónde estamos, o aquí o en nuestros foros http://www.dudasprogramacion.com :-D
Daniel
Muchas gracias, lo pondre en practica ;)
Víctor Cuervo
@Daniel,
Se puede incrustar el código de calculo de capicua en un método:
Y ahora ejecutar un bucle con todos los números de 4 dígitos llamando al método anterior:
Espero que te sirva. :-D
Daniel
Hola necesito saber como hacer un codigo que encuentre los numeros enteros capicua que tengan 4 digitos.
Ejemplo
1001
1221
1991
Etc
El programa debe imprimir el listado de números y la cantidad de números encontrados
Víctor Cuervo
@rut,
Te pueden servir los artículos:
Víctor Cuervo
@briyith,
Sería…
rut
hola necesito desarrollar un problema en eclipce y necesito ayuda para desarrollarlo
estes es el problema 1)dado n verificar si es palindrome,
agradezco su repuesta
briyith
hola como estas me gustaria saber como puedo hacer en el ciclo de for que un numero dado me lo aumente en dos en dos…hasta 10 veces ejemplo el usuario ingreso 5
5.7.9.11…….
AniaKat
donde acaba el primer while y donde va el if del final, el que pregunta si numeroInvertido=numero????
AniaKat
Una preguntita: para que sirve «/n…n/»??? y otra mas no se q es lo q estoy haciendo mal altranscribir este codigo pero corre asi:
es capicua
es capicua
.
.
.
es capicua, y asi y no termina me ayudan???
paola
no entiendo un ejercicio por favor ayudame a resolverlo y de paso una explicacion les agradesco.
ubica un digito en cada casilla para formar un número de cinco digitos, palíndromo y divisible por 12.
( )(6)( )( )( ) solo me dan el numero 6
gracias.
gabriel Panebianco
Hola lo eestoy realizando en Javalog, al mismo problema pero me tira un error a la hora de la division..creo que seria una division entera.,.. me gustaria saber como seria en javalog.
inv(F,R,A,A):- F=0.
inv(F,R,A,I):- F \= 0,P is F mod 10 ,assert(P), H is ((A*10) + P) ,assert(H),K is F / 10,assert(F),inv(K,P,H,I).
cuando hago k is F/10 no me realiza la division entera..ej
18 / 10 = 1.8
pero me deberia de dar 1 para poder seguir con la solucion
si alguien me ayuda gracias
lineadecodigo
@ele,
Me alegro que te haya servido. :-)
lineadecodigo
@karen,
Es que cuando divides cualquier número por 10 te quedas todas las cifras menos la última. Sin contar el resto (que serían los decimales). Prueba con cualquier número:
326/10 = 32,6
1024/10 = 102,4
43/10 = 4,3
…
ele
Hola, gracias por el aporte me ha servido de mucho…
karen
disculpa pero cuando haces la falta=falta/10 , ahí no lo esta dividendo??? entonces como es que saca el ultimo dígito para dejarte los otros?? por favor espero que me respondas y disculpa la molestia
[email protected]
karen
disculpa pero cuando haces la falta=falta/10 , ahí no lo esta dividendo??? entonces como es que saca el ultimo dígito para dejarte los otros??
Bolaños
SI QUIEREN INVERTIR UN NUMERO EL CODIGO ES EL SIGUIENTE:
import java.util.*;
public class Primero {
public static void main(String args[]){
Scanner leer=new Scanner(System.in);
int num=0, div = 0, res, div2, res2, div3, res3, div4 = 0, res4 = 0;
System.out.println(«Digite el numero a invertir (max. 5 cifras)»);
num=leer.nextInt();
if (num>=10000 && num=1000 && num=100 && num=10 && num=0 && num<=9){
imprimir("Como vas a invertir un solo numero tonto!");
}
}//main
public static void imprimir(String m){
System.out.println(""+m);
}
}
iris
hola tengo que hacer un programa en java con el eclipse que imprima cuañes son los nuemro s capicua del 101 al 999 que lleve laq sentencia for
gerald
int num,u,d,c,m,capicua;
String mensaje;
num = Integer.parseInt(JOptionPane.showInputDialog(null,
«Ingrese numero»,»nume»,1));
m=num/1000;
c=(num%100)/10;
d=(num%100)/10;
u=(num%100)%10;
if(u==m && d==c){
mensaje=»si es capicua»;
}else{
mensaje=»no es capicua»;
}
System.out.print(«el numero es :»+num+»\n»);
System.out.print(«El mensaje es :»+mensaje+»\n»);
}
}
yania
por favor me hace falta ayuda con esto….
yania
mira lo que hago en realidad es que yo cargo un fichero, lo convierto de un formato a otro, despues y en ese momento me hace que lea el fichero nuevamente pero a partir de la linea @data, a partir de leer esto debe de coger las lineas q aparecen debajo y hacerle lo del porciento, es decir un 90% en un fichero igual en todo en la parte de arriba y cambiaria las ultimas lineas, y en el otro 10% igual….
aqui muestro el codigo donde convierto…. a partir de aqui es que me hace falta hacer eso…
public void convert(String arff, String outDat1,String outDat2) throws IOException
{
File arfFile = new File(arff);
File outDatFile1= new File(outDat1);
File outDatFile2 = new File(outDat2);
BufferedReader br = new BufferedReader(new FileReader(arfFile));
String line = br.readLine();
Vector var = new Vector();
//boolean flag = true;
while (line != null)
{
if (line.contains(«@attribute») || line.contains(«@ATTRIBUTE»))
{
var.add(line.split(» «)[1]);
System.out.println(line.split(» «)[1]);
}
else if (line.contains(«@data») || line.contains(«@DATA»))
{
break;
}
line = br.readLine();
}
br = new BufferedReader(new FileReader(arfFile));
line = br.readLine();
String dat = «»;
while (line != null)
{
dat += line + «\n»;
if (line.contains(«actividad»)||line.contains(«act»))
{
dat += «@inputs «;
for (int i = 0; i < var.size() – 1; i++)
{
if(i == var.size()-2){
dat += var.get(i);
}
else
{
dat += var.get(i) + ", ";
}
}
dat += "\n" + "@outputs " + var.elementAt(var.size()-1) +
"\n";
}
line = br.readLine();
}
FileWriter writer = new FileWriter(outDatFile1);//para el tra(90%)
writer.write(dat);
writer.close();
FileWriter dato2 = new FileWriter(outDatFile2);//para el tst(10%)
dato2.write(dat);
dato2.close();
Jeanders
Necesito saber como sincronizar una base de datos SQLite en java con Eclipse con un servidor de bases de datos centralizado en PostgreeSQL.. Gracias de antemano.
Rodolfo
Para Yania #30 – 31 espero te ayude….!
// Rodolfo
import java.util.*;
public class StringBuffer
{
public static void main(String[] args)
{
int evPer = 0;
String file1;
String file2;
StringBuilder buffer = new StringBuilder(«Hola, espero que te ayude este ejemplo»);
System.out.printf(«buffer = %s\nlength = %d\ncapacity = %d\n\n»,
buffer.toString(), buffer.length(), buffer.capacity() );
evPer = (90 * buffer.length()) / 100;
System.out.printf(«Percentage 90 = %d\n\n», evPer );
buffer.setLength(50);
file1 = buffer.toString().substring(0, evPer );
file2 = buffer.toString().substring( evPer );
StringBuilder buffer1 = new StringBuilder(file1);
buffer1.setLength(50);
StringBuilder buffer2 = new StringBuilder(file2);
buffer2.setLength(50);
System.out.printf(«File1 90 per = %s\nFile2 10 per = %s\n\n\n», file1, file2);
System.out.printf(«Buffer1 = %s\n Length = %d\n\n», buffer1.toString(), buffer1.length() );
System.out.printf(«Buffer2 = %s\n Length = %d\n\n», buffer2.toString(), buffer2.length() );
}//end main
}//end class
yania
Espero que alguien me ayude…………es urgente.please….
yania
necesito saber leer un fichero, despues que lo lea contar los caracteres que tiene, sacar el 90% y copiarlo en uno fichero igual q ese pero cambiaria solamente la cantidad de caracteres, y el otro 10% guardarlo en otro que sea igual que el anterior pero que tenga nada mas ese porciento.
Renz
hola!
necesito Realizar una aplicación que contenga un TextField, y cuando se pulse un botón, invierta su contenido y lo muestre en el mismo TextField.
Además, contará con un checkbutton. Si dicho botón está marcado en el momento de pulsar el botón «INVERTIR», se hará una comprobación adicional que nos diga si el texto escrito es un palíndromo. Este resultado se mostrará en un textfield adicional.
dantehell
ola
necesito
acer una aplicacion en netbeans que por ejemplo el usuario digita digamos un numero 845 necesito que me sume el 8+4+5 y me de la respuesta como ago por favor manden respuestas a mi msn [email protected]
jose lizardo rojas cruz
no puedo resolver este algoritmo en php «elabora un programa que lea un munero y un digito e imprima un mensaje que diga que el digitose encuentra dentro del numero»
Pau
necesito pedir un número al usuario y el programa me tiene que decir cuantos palindromos hay con ese digito.
n=1 10 palindromos
n=2 9 palindromos
n= 3 90 palindromos
n=4 90 palindromos
n=5 900 palindromos
como puedo hacerlo??
leoalas
esto el lo mejor
public class NumInverso {
public static void main(String args[]){
//Declaracion
int u,d,c,num,numInv,aux;
//Ingreso
num=321;
//Proceso
aux=num;
c= num/100;//4
num=num%100;
d=num/10;
u=num%10;
numInv=u*100+d*10+c;
//Salida
System.out.println(«El numero inverso es:»+numInv);
}
}
lineadecodigo
@manuel,
¿Qué no te vale del ejemplo explicado arriba?
manuel
oa espero k me ayuden con este ejercicio. escribir una funcion que determine si un numero entero, mayor o igul que 0, es o no capicua.
LEONCIO VELASQUEZ GONZALES
REALIZAR UN ALGORITMO QUE ME DIGA SI UN NUMERO ES CAPICUA
REALIZAR UN ALGORITMO QUE ME DIGA SI EL NUMERO INGRESADO ES O NO VISIESTRO
andres
necesito un programa que me lea un numero y me diga si es capicua o no en eclipse java
leoq
mecesito una linea de codigo para que el programa me asecte el punto entre los numeros
snakedark
En el ejemplo de arriva pongo el Algoritmo de como ver un numero al reves por ejemplo:
123 a 321
Si quieren saber si es capicual solamente aumentarian un if:
if (numero==inverso){
System.out.println(«Es Capicua»);
}else{
System.out.println(«No es Capicua»);
}
snakedark
int numero= 787; //Ingresa Numero a invertir
int cociente=numero;
int resto;
String inverso=»»;
int contador=0;
int div = 1;
for(contador=0;cociente!=0;contador++){
// Sacamos el divisor multiplicandolo por 10 cada ves que cuente
div = div * 10;
//Formula
resto = ((numero % div)-(numero % (div/10) ))/ (div/10);
// Convertimos resto en String para concatenarlo
inverso += String.valueOf(resto);
//Restamos el cociente
cociente=cociente/10;
}
//Mostramos numero al REVES
System.out.println(«Inverso: » + inverso);
Maritza Muñoz Suarez
en definitiva ustedes son unos duros sera que me pueden ayudar con mi problema necesito programar en borland c++ o en c++ que es muy similar lo siguiente. solicitar al usuario un valor entero y decir si el numero es capicua o no.
hector
Por favor quiero saber como hacer, necisto sasber como identificar un numero capicua pero en visual basic .net ..
gracias …
[email protected]
Daniel
hey una cosa en la declaracion del Long no entendi que hacia esa L alli
¿acaso es necesaria para que el progrma funcione?
Anthony
Qué buena página! gracias por hacer eso, me ayudo bastante, soy nuevo en programación , pero lo entendí , lo hice en consola y formulario en netbeans. gracias!…….. =D
WMI
Corregire…el resultado es decimal de un valor binario :)
WMI
En base a ese fragmento de codigo, y la forma interesante de extraccion matematica de digitos, tambien es posible utilizarla en otros casos. Aportare por ejemplo como obtener el valor decimal a binaro…
….
int number, decingr, posicion1, bin = 0, posicion_n = 2;
int digito;
….
posicion1 = 1;
decingr = number;
while (decingr !=0){
digito = decingr % 10;
if (posicion1 == 1)
bin = 1 * digito + bin; else
{
bin = posicion_n * digito + bin;
posicion_n *= 2;
}
++posicion1;
decingr /= 10;
}
g.drawString («Decimal: » + bin, 100, 100);
J_Logan
Creo que lo mas rapido y sencillo es lo siguiente:
1.- String palabra1 = Numero;
2.- String palabra 2 = invertido(palabra1);
3.- if(palabra1.equals(palabra2){
//Capicua
}
private static string invertido(string word){
string result= «»;
for (int i = word.Length-1; i>= 0; i–)
result= result+ word.Substring(i, 1);
return result;
}
Alex
gracias.chee..lo que no entiendo..la funcion que realiza el primer while, osea pone las variables en 0, pero la condicion q teine no me cierra, porq seria mientras numero sea mnor igual q 0 es lo q lea yo ahi.
espero tu respuesta, gracias..
isaias
mi email en Chack.isa @gmail.com porfa ayudenme
isaias
como puedo colocar el resto (%) en una class para obtener el digito verificador del rut, el codi
go que cree para esto es este:
public class Rut {
private String _rut;
private char _dv;
public void setRut(String r, char dv){
int ac = 0;
int cte = 2;
for(int r1 = 0; r1 < _rut.length(); r1++ ){
ac=ac+_rut.charAt(r1)-‘0’;
if(cte ==7)
cte=2;
System.out.println(_rut.charAt(r1)-‘0′);
}
int res= ac %;
int dvc = 11, res;
if((dv=’0’)==dvc)
throw new DataError(» el dato ingresado es incorrecto «);
_dv=dv;
}
public String toString(){
return _rut+»-» + _dv;
}
}
¿cómo puedo hacer para que el resto no me marque error? porfa pueden ayudarme es urgente
alberto
mi e mail es [email protected]
alberto
hola no entiendo un problema el problema es el siguiente la suma de los numeros que forman los 5 digitos es igual a los numeros de la primera y segunda pista invertidos
primera pista = tienes 7 y lo multilplicas por2 y le resta 5 dara un numero que no esta en los 5 digitos
segunda pista = si al numero 10 lo multiplicas por 100 y le restas 3 veces el numero de la primera pista dara un numero valido de lo 5 digitos hayudame pofavor te lo agradeceria toda mi vida cuales son los numeros de los 5 digitos por favor mandame la repuesta a mi e mail
Martin Areosa
porque no meter el numero en un String y recorrer ese String a la inversa, y comparar el resultado de la inversion con el original, con un equals le pregunto si es igual, y listo.
Digo, no es asi mas facil.
erzelius
muchas gracias gaudy,eres un duro para esto….sabes busco mas ejemplos de arrays,cualkier cosa,me avisas gracias!!!!xd
gaudy
no confundas no esta divido el % no es division las divisio es la barra «/»
el tanto por ciento te coje el resto de si lo divria entre 10 vamos q te coje el ultimo numero de 4224 te cojeria el ultimo 4 y eso de multiplicar el numero y sumarle el resto es para darle la vuelta. el numero invertido la primera vez estaria a 0 por inicializacion lo quedaria 4 q es el resto.. vovleria epetir el proceso por q la flata es distinta de cero la segunda vez el numero invertido es 4×10 seria 40 mas resto seria 42… y asi poco apoco vas girando el numero( la ultiplicacion por 10 hace q aumente un digito y la suma del resto q sea el numero q teniamos)
erzelius
kisiera saber,porke el numero despues de dividirse por 10,se multiplica por 10 y a eso se le suma el resto?????
gracias,disculpen la imcomprension…..