Forum Clubic

Séparer un nombre chiffre par chiffre - En langage C

Salut,

Voila, j’aimerais connaitre tous les nombres(<100000) qui on comme caracteristiques : 153 = 1³ + 5³ + 3³ = 153
Je ne sais pas trop comment m y prendre ? Existe t il une fonction qui separe les chiffre ou quelque chose comme ca ??

Merci beacoup

Tu peux utiliser le reste de la division entière de Valeur par 10. Attention le premier reste est la dernière valeur.
Exemple:

153 > 10 donc
153 / 10 = 15 * 10 + 3 -> 3
15 > 10 donc
15 / 10 = 1 * 10 + 5 -> 5
1 < 10 donc
on stocke 1

Après c’est une idée. Je ne sais pas si une fonction toute fait existe :smiley:
Tu peux toujours fouiller par ici : http://www.acm.uiuc.edu/webmonkeys/book/c_guide/index.html

Ok, je te remercie.
Devant mon ecran je ne voyait pas comment m y prendre mais devant une bonne vielle feuille de papier ca a ete.

Encore merci

Sinon tu peux utiliser sprintf() et la table ASCII:


char s[7]; // Inférieurs à 100000 tes nombres :paf:
sprintf(s, "%u\n", 153);
for(int i=0; i<strlen(s); i++) {
    ...
    // s[i]-'0' te donne respectivement 1, 5 et 3.
}

bouh !! on fait pas i < strlen(s), on fait s[i] ! :wink:

Bah comme ça je suis sûr de ne pas avoir des caractères à la noix comme dans ta signature :paf:
Sinon c’est vrai, c’est mieux s[i] :jap:

Les tableaux de char ascii. Pire encore, tableaux de nombre == [0-9.-]
et strlen(s) à chaque itération spa le top :slight_smile: tu transforme la compléxite en O(n*n).

D’un autre coté pour ses algos je sais pas si la complexité est un enjeu majeur …

en fait si tu prend le pb a l’envers ça donne


#include <stdio.h>
#include <stdlib.h>

#define CUBE(n) (n*n*n)

int main(int argc, char *argv[])
{
  long i[5];
  long v,n;
  
  for(i[0]=0;i[0]<10;i[0]++)
   for(i[1]=0;i[1]<10;i[1]++)
    for(i[2]=0;i[2]<10;i[2]++)
     for(i[3]=0;i[3]<10;i[3]++)
      for(i[4]=0;i[4]<10;i[4]++)
      {
       v=CUBE(i[0])+CUBE(i[1])+CUBE(i[2])+CUBE(i[3])+CUBE(i[4]);
       n=i[0]*10000+i[1]*1000+i[2]*100+i[3]*10+i[4];
       if(v==n)printf("%ld\n",v);
      }
  
  system("PAUSE");	
  return 0;
}


Merci pour votre engouement a m’aider.
Mon programme tourne nickel.

Merci