Solution
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
unsigned int longueur (unsigned int n)
{
if (n<10) return 1 ; //n est constitué d'un seul chiffre donc on peut décider :
//le cas trivial
else return 1 + longueur(n/10) ; //n est constitue de plus d'un chiffre :
//appel recursif de la fonction longueur
}
void decompose( unsigned int M , unsigned int n , unsigned int * M1 , unsigned int * M2 )
{ unsigned int i,_10_puiss_n=1;
for(i=0;i<n;i++)
_10_puiss_n*=10; //Calcul de 10^n
*M1 = M%_10_puiss_n ; //calcul du nombre M1
*M2 = M/_10_puiss_n ; //calcul du nombre M2
}
unsigned int Kaprekar ( unsigned int nbre)
{ unsigned int M1 , M2 ;
decompose( nbre*nbre , longueur(nbre) , &M1 , &M2 );
return ( nbre == (M1+M2) ) ;
}
int main()
{ unsigned int T[1000] , i , j ;
for( i = 0 , j = 0 ; i<1000 ; i++)
if ( Kaprekar( i ) ) { T[j] = i ; j++ ;}
printf("nLes nombres de Kaprekar impairs <1000 sont : ") ;
for( i = 0 ; i<j ; i++)
if(T[i]%2) printf("t%d",T[i]) ;
printf("n") ;
system ("pause");
return 0;
}