e intentado cambiar la linea 15 a int y=0, z; pero ahora los números que me daban infinitos ahora no me dan el número que debería en el resultado (el 6174)
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúCita de: ivancea96 en 15 Septiembre 2016, 23:59 PM
Me parece algo "mejor" hecho este: https://sites.google.com/site/programmingwithsantiago/kaprekars-constant-using-c-language
Además, tiene comentarios y partes bastante bien definidas.
Lo único, 2 cosas:
-Tiene un error. La línea 15 hay que cambiarla por: int y=0, z;
-Es un bucle que hace el procedimiento con cada número del 1000 al 9999 (excepto los de 4 cifras iguales).
Es un código algo guarro, pero bueno.
En cualquier caso, lo mejor es que lo intentes hacer tú. No sé qué nivel tienes, pero si vas paso a paso, irás viendo qué problemas tienes, e incluso puedes ponerlos por aquí para resolverlos. El procedimiento tiene unos pasos bastante simples. Lo más difícil: ordenar las cifras. Si nunca hiciste algo sobre ordenar, es también un buen comienzo.
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
int numero, n1=0,n2=0,n3=0,n4=0,aux,i,i2,max1=0,max2,max3,max4,numas,numdes;
char s, n;
int main()
{
printf("Programa para la constante Kaprekar");
printf("\n ingresa un numero de 4 digitos \n");
scanf ("%d",&numero);
if(numero>999 && numero <=9999)
{
printf ("\n Resultados \n");
do
{
i2=0; i=0;
aux=0;n1=0;n2=0;n3=0;n4=0;
while(numero>10)
{
i2=numero%10;
switch(aux)
{
case 0:{n1=i2;aux ++ ; break;}
case 1:{n2=i2;aux ++ ; break;}
case 2:{n3=i2;aux ++ ; break;}
}
numero/=10;
}
n4=numero;
max1=n1; max2=n2; max3=n3; max4=n4;
if (max1!=max2||max2!=max3||max3!=max4 )
{
int i3=0;
do
{
if (max1<=max2)
{
aux=max1;
max1=max2;
max2=aux;
}
if(max1>=max2 && max2<=max3)
{
aux=max2;
max2=max3;
max3=aux;
}
if (max1>=max2 && max2 >=max3 && max3<=max4)
{
aux=max3;
max3=max4;
max4=aux;
}
i3++;
}
while(i3<=3);
numas=max1*1000+max2*100+max3*10+max4;
numdes=max4*1000+max3*100+max2*10+max1;
printf("%d - %d= %d \n",numas,numdes,numas-numdes);
i++;
numero=numas-numdes;
if(numero==6174)
i=9;
else(1000);
}
else
{
printf ("Repdigit, intente denuevo ");
i=9;
}
}while(i<=7);
}
else
{
printf ("el valor tiene mas o menos de 4 digitos");
}
printf("fin del programa, presiona s para limpiar pantalla");
scanf("%s", &s);
system("cls");
system("pause");
return 0;
}