De todas formas esta bueno generalizar la solución para calcular si un número es k-mórfico (o como se quiera llamar). Es decir, hacer un algoritmo que calcule para cualquier potencia, no solo para 2 y 3. Yo llegue a estas dos soluciones:
Primera (no óptima...):
Código
#include <stdio.h> #include <math.h> #include <stdlib.h> #define FALSE 0 #define TRUE !FALSE typedef int Bool; int cant_digitos(int numero) { int cifras; ; return cifras; } void array_digitos(int numero, int numero2) { int cifras = cant_digitos(numero); int i = 0; while(cifras>0) { array[i] = numero%10; array2[i] = numero2%10; numero = numero/10; numero2 = numero2/10; i++; cifras--; } int j; for(j=0; j<i; j++) Bool b=TRUE; j=0; for(; j<i; j++) { if(array[j] != array2[j]) { b = FALSE; break; } } } void array_digitos2(int numero, int numero2, int n) { int copia = numero; int cifras = cant_digitos(numero); int j, i; i=0; while(cifras>0) { array[i] = numero%10; array2[i] = numero2%10; numero = numero/10; numero2 = numero2/10; i++; cifras--; } Bool b=TRUE; for(j=0; j<i; j++) { if(array[j] != array2[j]) { b = FALSE; break; } } if(b) } int main() { for(i=2; i<=k; i++) return 0; }
Segunda (mejor pues usa variables simples):
Código
#include <stdio.h> #include <stdlib.h> #include <math.h> #define FALSE 0 #define TRUE !FALSE typedef int Bool; long int potencia(int a, int b) { if (b<=0) return 1; else return a*potencia(a,b-1); } { Bool b = TRUE; int num2, cifras, copia=num; for(cifras=0; potencia(10,cifras)<=num; cifras++) ; /* printf("num: %d, cifras: %d, num2: %d \n", num, cifras, num2); */ while(cifras>0) { /* printf("%d>0, %d(mod 10)=%d == %d(mod 10)=%d \n", cifras, num, num%10, num2, num2%10); */ if(num%10 != num2%10) { /* printf("Luego %d>0, %d(mod 10)=%d == %d(mod 10)=%d \n", cifras, num, num%10, num2, num2%10); */ b = FALSE; break; } num = num/10; num2 = num2/10; cifras--; } /* else printf("\nNo es automórfico. Pues %d^%d=%ld\n", copia, exp, potencia(copia, exp)); */ } int main() { for(i=2; i<=k; i++) funcion(i, j); return 0; }
Bienvenida es cualquier critica constructiva pues para aprender estamos aqui, y otras soluciones alternativas. Saludos.