Bonjour à tous !

Voila j'ai besoin de votre aide pour un petit programme que j'ai réalisé en amateur. En fait je voudrais résoudre une énigme et pour cela, j'ai voulu faire appel à mes petites connaissances sur le langage C. Le but est de trouver un multiple de 2013 contenant moins de 250 chiffres et dont la somme est 2013.

Voici ce que j'ai fait :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int somme(double n);
 
int main()
{
    double multiple = 0;
    int x = 0;
 
    do
    {
        multiple = multiple + 2013; // La variable "multiple" prend successivement pour valeur les différents multiples de 2013
        x = somme(multiple); // Le résulat x est la somme des chiffres du multiple en question
        printf("%d avec %f\n", x, multiple); // On affiche x ainsi que le multiple qui lui correspond
 
    } while (x != 2013);  // La boucle continue tant que x est diffférent de 2013
 
    printf("\n\n\n\n\nLe resultat est %f\n\n\n\n\n\n\n\n\n\n", multiple);  // On affiche le résultat
 
    return 0;
}
 
int somme (double n)
{
    int  /*compteur = 0,*/ d = 0, longueur_du_nombre = 250, n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0, n8 = 0, n9 = 0;
    double /*image = n,*/ image2 = n;
 
    /*
    do
    {
        compteur = image / 10;
        longueur_du_nombre++;
    } while (compteur > 1);
 
    Je ne sais pas ce qui n'a pas fonctionné ici... c'était censé calculer la longueur de chaque nombre avant.. du coup, j'ai mis 250 un peu plus haut à la place de 0 */
 
    while(longueur_du_nombre != 0)
    {
        d = image2/pow(10,longueur_du_nombre-1); // On divise le nombre par 10^250, puis 10^249..., puis 100 puis 10 puis 1
        d = floor(d); // A chaque fois, on ne garde que la partie entière
        d = d%10; // On récupère seulement le chiffre des entiers
 
        switch(d) // Selon la valeur de d, autrement dit du chiffre, on incrémente l'une des variables de n1 à n9
        {
        case 1 :
            n1++;
            break;
        case 2 :
            n2++;
            break;
        case 3 :
            n3++;
            break;
        case 4 :
            n4++;
            break;
        case 5 :
            n5++;
            break;
        case 6 :
            n6++;
            break;
        case 7 :
            n7++;
            break;
        case 8 :
            n8++;
            break;
        case 9 :
            n9++;
            break;
        }
 
        longueur_du_nombre--; // On décrémente la variable "longueur du nombre" puis on recommence...jusqu'à ce que celle-ci soit égale à 0
    }
 
    return (n1) + (2*n2) + (3*n3) + (4*n4) + (5*n5) + (6*n6) + (7*n7) + (8*n8) + (9*n9); // On renvoie la somme des chiffres
}
Au début, le programme marche très bien, mais à partir d'environ 2,5 millards, la somme x est fausse...
Si vous pouviez me dire d'où vient le problème, sans pour autant me donner la réponse toute faite, je vous en serais très reconnaissant. J'ai beau chercher mais je ne trouve pas la source du problème mais je veux réfléchir un peu aussi
Merci d'avance !