2010-11-05 13 views
2

J'allais le faire en C mais j'étais confus .. Alors je me suis tourné vers PHP et j'ai pu copier une fonction récursive pour le faire. Je convertis un entier en une chaîne avec des maths, juste nue avec moi! Ici, il est:PHP: Fonction récursive simple en fonction itérative

function intToString($myDecimal){ 
    if($myDecimal < 10) { 
     return $myDecimal; 
    } 
    return intToString(($myDecimal/10)) . ($myDecimal % 10); 
} 

j'ai pu convertir une fonction récursive avant factoriel .. mais avec cela, je dois tout simplement pas la moindre idée .. Ma tentative est la suivante:

function intToStringIter($myDecimal){ 
    $out = ""; 
    while($myDecimal > 10) { 
     $myDecimal /= 10; 
     $out .= $myDecimal; 
    } 
    $out .= $myDecimal % 10; 
    return $out; 
} 

Je pense que je suis trop fatigué pour voir la bonne logique en ce moment .. Il renvoie 22 au lieu de 20, je ne peux pas envelopper ma tête autour de ce qui est correct. Voyez-vous ce que je fais mal?

+1

Exemple d'utilisation s'il vous plaît? – RobertPitt

+0

Je ne trouve pas le point. Est-ce que ce sont les devoirs? La conversion entre entier et chaînes n'est pas nécessaire en PHP. – xPheRe

+0

@xPheRe, C'était pour une question d'entrevue qu'un ami avait posée, il n'était pas dans l'interview qu'il venait de lire sur la question, je l'aidais à comprendre comment le faire. – John

Répondre

1

Si vous êtes à la recherche d'une conversion en chaîne pour les grands entiers non signés, le code est en fait:

function intToString($myDecimal) 
{ 
    return sprintf('%u', $myDecimal); 
} 

Si vous devez le faire avec itération:

function intToString($myDecimal) 
{ 
    $result = ''; 
    while ($myDecimal > 9) { 
     $result = ($myDecimal % 10) . $result; 
     $myDecimal /= 10; 
    } 
    return $myDecimal . $result; 
} 

MISE À JOUR: Mon mauvais, les chiffres ont été insérés dans l'ordre inverse. Maintenant ça devrait marcher. Désolé, non testé aussi.

+0

Je voulais le faire en C, qui n'utilisait aucune fonction standard (donc sprintf est sorti), votre deuxième exemple crache "02" au lieu de "20", bizarre. J'aide vraiment quelqu'un à faire ça en C, je vais arręter de me briser l'esprit et m'endormir. :) – John

+0

J'ai mis à jour ma réponse, vous aviez raison, elle a construit la chaîne dans l'ordre inverse. Maintenant, cela devrait fonctionner correctement. J'espère. – xPheRe

+0

Ah! Après un peu de sommeil je comprends cela maintenant, cela fonctionne parfaitement et s'applique au problème que je voulais aider quelqu'un. Il devrait être simple à faire en C maintenant (avec une simple addition ASCII). Je vous remercie – John

0

PHP n'est pas très strict avec des variables. Un entier deviendra un flottant si la situation l'aime. Dans votre code, $myDecimal /= 10 pourrait faire un flotteur de $myDecimal. Les éléments suivants forcent $ myDecimal à rester un entier. Remarque: vous ne devez transmettre que des entiers, si vous passez 9.99, la sortie sera toujours 9.99 car 9.99 < 10.

function intToStringIter($myDecimal){ 
    $out = ""; 
    while($myDecimal >= 10) { 
     $myDecimal = (int) ($myDecimal/10); 
     $out .= $myDecimal; 
    } 
    $out .= $myDecimal % 10; 
    return $out; 
} 
Questions connexes