Un número es "Ayuyadigital" si todos sus digitos son distintos, esta es una variación del programa esPandigital que se paso en el laboratorio 6, en esta ocacion se usan punteros de una forma basica.
____________________________________________________
#include <stdio.h>
#include <stdlib.h>
int cuentadigitos(long long unsigned int);
int esAyuyadigital(long long unsigned int);
int main(void){
long long unsigned int numero;
printf("Ingrese su numero: ");
scanf("%I64u", &numero);
if (esAyuyadigital(numero)==-1){
printf("no se pudo asignar memoria\n");
system("pause"); return 0;}
/*esto de arriba es solo formalidad, es raro que con un programa como este se
acabe la memoria del computador*/
else if (esAyuyadigital(numero)==1) printf("%I64u es ayuyadigital\n", numero);
else printf("%I64u no es ayuyadigital\n", numero);
system("pause");
return 0;
}
int esAyuyadigital(long long unsigned int argumento){
short int* puntero,i,j; /*short porque solo almacenaremos los digitos que
son números pequeños, y contadores que no llegaran a numeros muy grandes*/
int n=cuentadigitos(argumento);/*Aca llamamos a una funcion simple que
cuenta los digitos del número*/
puntero=(short int*)malloc(n*sizeof(short int));//Asignamos memoria
if (puntero==NULL)
return -1;//retorna -1 para decir que hubo error en memoria
for(i=0;n>i;i+++){
*(puntero+i)=argumento%10;/*Guardamos cada digito en la
i-esima posicion del puntero*/
argumento/=10;
}
for(i=0;n>i;i++)/*ahora revisamos si tiene dos digitos iguales, si es asi,
se sale inmediatamente del programa, se debe considerar la salvedad de que i
y j deben ser distintos*/
for(j=0;n>j;j++){
if ((*(puntero+i)==*(puntero+j))&&(i!=j))
return 0;
}
}
return 1;
}
int cuentadigitos(long long unsigned int argumento){
/*Esto ya se a explicado bastante por lo cual no lo comentare*/
int contador=0;
while (argumento>0){
argumento/=10;
contador++;
}
return contador;
}
________________________________________________________