9
votes

Stackoverflow tout en comptant les chiffres

J'essaie de compter le nombre de chiffres dans un certain nombre de clojures comme suit: je reçois un chiffreverflowerror même pour des numéros de 2 chiffres xxx

mais si je remplace / avec non cochéra-divide puis Cela fonctionne pendant au moins 93. Mais aucune des techniques ne fonctionne pour: xxx

Premièrement, j'aimerais savoir comment effectuer la division Le style C dans le clojure. Chaque fois que je le fais (/ x), je reçois un ratio et non un entier. Quelle est la façon de le faire?

Deuxièmement, est-ce une API de manière à convertir ce nombre en un vecteur de chiffres et d'appeler compter dessus.

merci,
Ajay g


2 commentaires

Je ne sais pas de clojure, mais il ne faut-il pas y avoir un moyen de convertir le nombre en une chaîne, puis d'obtenir la longueur de la chaîne? À peu près toutes les autres langues que je peux penser a une telle fonction.


log10: Stackoverflow.com/Questtions/27229987/...


4 Réponses :


3
votes

Selon Cette page , vous pouvez effectuer une division entière dans le clojure en utilisant quot : xxx


0 commentaires

4
votes

Les tentatives de clojure de "faire la bonne chose" avec des opérations numériques et ne perdent jamais la précision b>. Donc, lorsque votre appareil dit 17/10, le résultat est la fraction 17/10 (dix-sept dixièmes) non 1. Par défaut Aucune information ne sera perdue dans l'une des opérations numériques. Dans des cas comme celui-ci, vous pouvez jeter explicitement la précision supplémentaire avec (citation x 10) code> ou vous pouvez lancer le résultat à un int (int (/ 17 10)) code> Pour la deuxième question Voici un petit piratage: p>

(count (take-while pos? (iterate #(quot % 10) 257))))


0 commentaires

4
votes

Il n'y a pas d'optimisation de la queue de clojure. Vous devez utiliser le recur formulaire spécial.

par exemple: < / p> xxx

mais en réponse à votre deuxième question: Oui, et voici comment: xxx


1 commentaires

Dans le code d'origine, l'appel n'est même pas en position de la queue. Donc, ce code échouerait dans toutes les autres langues aussi bien.



8
votes

C'est pourquoi vous rencontrez un problème: xxx pré>

ceci est la solution: p> xxx pré>

C'est l'expression que vous " RE rechercher: p> xxx pré>

Ceci est triche: p> xxx pré>

C'est la fonction que vous essayiez d'écrire (mais attention , il empilera un débordement pour grand nombre): p> xxx pré>

Cependant, il appartient au défi: p>

user> (defn num-digits-tail-recursion 
        ([n count]
           (if (= 0 n)
             count
             (recur (quot n 10) (inc count))))
        ([n] (num-digits-tail-recursion n 0)))
#'user/num-digits-tail-recursion
user> (num-digits-tail-recursion 10923)
5


0 commentaires