Fct recursive pour convertir "123" en ch

Résolu/Fermé
bibliomax Messages postés 30 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 23 janvier 2010 - 23 janv. 2010 à 01:11
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 23 janv. 2010 à 21:28
Bonjour,
bonjour tout le monde j'aimerais bien que quelqu'un m'aide à résoudre un ce problème de récursivité
cette fonction prend en paramètre un tableau de caractères et un entier qui représente le nombre de ces caractères qui sont entre '0' et '9' et calcule l'entier correspondant
sachant que le dernier caractères représente le 1er chiffre l'avant dernier représente le 2ème..

voilà ce que j'ai pu faire mais c'est faux le résultat n'est pas bon

int tolnt(char *s,int nb){

if(nb>0) return (tolnt(s,nb-1) * todigit(s[nb-1]));
else return 10;

}

a l'appel par exemple tolnt("12234",5) ===> la fonction doit retourner ceci 43221

merci de votre intérêt
A voir également:

4 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 janv. 2010 à 19:41
Je ne réponds pas exactement à la question, car je préfère ma question ;-)
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int retourne(const char* chn)
{
  char* str = strdup(chn);
  int i, result, lng = strlen(str);
  for (i=0; i<(lng)/2; i++)
  {
    char tmp = str[i];
    str[i] = str[lng-1-i];
    str[lng-1-i] = tmp;
  }
  result = atoi(str);
  free(str);
  return result;
}

int main()
{
  char* chaine = "12234";
  printf("\"%s\" -> %d\n", chaine, retourne(chaine));
  return EXIT_SUCCESS;
}
Je te laisse donc adapter ma réponse à la tienne, Etienne ! Il est des nô-ôtres, il a codé son prog comme les au-autres ;-)
Bonne continuation.
0
bibliomax Messages postés 30 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 23 janvier 2010 3
23 janv. 2010 à 20:04
merci de votre réponse mais c'est pas ça ce que je voulais parce que avec la méthode classique c'est facile
en plus la fonction retourne un entier et pas une chaine de caractères mais comme j'ai dit avant ça c'est à la porté de tout le monde ... les choses se complique si la fonction devrait être récursive il faut récupérer le dernier caractère le multiplier par 10 et puis l'additionner avec l'avant dernier et le processus continu
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
23 janv. 2010 à 21:28
Ah, effectivement, je n'avais pas compris la question et je dois bien avouer que ce n'est qu'à la lecture de la réponse de Fiddy que je l'ai comprise. Je ne pensais pas en être si éloigné.
Il ne te reste plus qu'à mettre le post en 'résolu'.
Bonne soirée.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
23 janv. 2010 à 21:03
La méthode récursive n'est pas plus difficile que la méthode itérative...
Elle est même plus simple en fait.
Voici un exemple simple :

#include <stdio.h>
#include <string.h>

int toInt(const char *s, const int nb) {
    if (nb>1) {
        return s[strlen(s)-nb]-'0'+10*toInt(s,nb-1);
    } else{
        return s[strlen(s)-1]-'0';
    }
}

int main(void) {
    char *s="12345";

    printf("%d\n",toInt(s,strlen(s)));

    return 0;
}
0
bibliomax Messages postés 30 Date d'inscription mercredi 15 octobre 2008 Statut Membre Dernière intervention 23 janvier 2010 3
23 janv. 2010 à 21:09
merci beaucoup pour la solution c'est exactement ce que je voulais
0