Algorithme de Luhn – Implémentation C
Pour faire suite à mes posts Algorithme de Luhn – Implémentation C++ et
Algorithme de Luhn – Implémentation C#, voici une version de l’agorithme implémenté en C.
Dans la solution que je propose ci-dessous, je suis arrivé au résultat suivant :
- le code comptabilisé est constitué des 68 caractères significatifs de la suite d’instructions :
int s=0,i=16,v;while(i–)v=*l++-’0′<<i%2,s+=v-9*(v>9);return s%10<1; - le temps d’exécution mesuré pour 1000000 itérations est de 0,16 secondes sur un Intel Core 2 Duo cadencé à 2,13 Ghz sous Ubuntu 9.04. Le code a été compilé par gcc 4.3.3 sans option.
Si vous avez des commentaires, des suggestions ou si vous avez une solution plus compacte ou plus rapide, n’hésitez pas à m’en faire part.
#include "stdio.h"
#include "time.h"
int luhn( char* l )
{
// début du code comptabilisé
int s = 0, i = 16, v;
while ( i-- )
v = *l++ - '0' << i % 2,
s += v - 9 * ( v > 9 );
return s % 10 < 1;
// fin du code comptabilisé
}
int main(int argc, char* argv[])
{
clock_t start = clock();
// début du temps d'exécution mesuré
unsigned long l = 1000000L;
while ( l-- )
luhn( "4970100000300521" );
// fin du temps d'exécution mesuré
clock_t end = clock();
printf( "Le temps d'exécution de la fonction est de %.2f secondes.\n", (float) ( end - start ) / (float) CLOCKS_PER_SEC );
return 0;
}



