166 votes

Comment vérifiez-vous si un nombre est divisible par un autre nombre?

Je dois tester si chaque nombre de 1 à 1000 est un multiple de 3 ou un multiple de 5.

J'ai essayé ce code en Python 2.x:

n = 0
s = 0

while (n < 1001):
    x = n/3
    if isinstance(x, (int, long)):
        print 'Multiple of 3!'
        s = s + n
    if False:
        y = n/5
        if isinstance(y, (int, long)):
            s = s + n

    print 'Number: '
    print n
    print 'Sum:'
    print s
    n = n + 1

L'idée est d'essayer de diviser le nombre et de voir si le résultat est un entier. Cependant, je n'obtiens pas le résultat attendu.

Comment puis-je tester si le nombre est un entier?


En 2.x, une division comme celle-ci produira un entier, en ignorant le reste; voir <a href="https://stackoverflow.com/questions/1267869">Comment puis-je forcer la division en point flottant ? La division continue d'arrondir à 0 ?</a> pour plus de détails.

En 3.x, la division produira une valeur en point flottant; le résultat <strong>n'est pas</strong> "un entier" <em>même s'il s'agit d'un nombre entier</em>, donc le test <code>isinstance</code> échouera. Voir <a href="https://stackoverflow.com/questions/1282945">Pourquoi la division entière donne un flottant au lieu d'un autre entier ?</a> pour plus de détails.

Si vous avez besoin du reste de la division entière plutôt que simplement tester la divisibilité, voir <a href="https://stackoverflow.com/questions/5584586">Trouver le reste de la division d'un nombre</a>.

2 votes

En Python 2.x, la division d'entiers donne toujours un entier.

22 votes

Vous devriez imprimer "Fizz" et "Buzz"

12 votes

Problème 1 du Projet Euler ?

-1voto

james faber Points 11
a = 1400
a1 = 5
a2 = 3

b= str(a/a1)
b1 = str(a/a2)
c =b[(len(b)-2):len(b)]
c1 =b[(len(b1)-2):len(b1)]
if c == ".0":
    print("yeah for 5!")
if c1 == ".0":
    print("yeah for 3!")

1 votes

Il vaut mieux expliquer la correction que vous avez apportée et ce qui l'a rendue fonctionnelle

1 votes

Il ne s'agit PAS d'une bonne méthode pour tester la divisibilité : effectuer une division en virgule flottante, convertir en chaîne de caractères, puis effectuer des manipulations de chaînes pour vérifier si la partie fractionnaire est (littéralement) ".0" est au mieux inefficace et potentiellement incorrect en fonction de l'implémentation du point flottant et du code qui effectue les conversions.

0 votes

Essayez x=10000000000000000; b = str(x/(x-1)); b dans l'interpréteur Python.

-3voto

Pour les petits nombres n%3 == 0 sera bien. Pour les très grands nombres, je propose de calculer d'abord la somme croisée et ensuite de vérifier si la somme croisée est un multiple de 3 :

def is_divisible_by_3(number):
    if sum(map(int, str(number))) % 3 != 0:
        my_bool = False
    return my_bool

2 votes

Est-ce que le calcul de la somme croisée et l'utilisation de l'opération de modulo est vraiment plus rapide que d'utiliser directement l'opération de modulo? Si c'est le cas, ne devriez-vous pas appeler votre fonction de manière récursive jusqu'à ce que le nombre soit "suffisamment" petit?

-9voto

Essayez ceci ...

public class Solution {

  public static void main(String[] args) {
    long t = 1000;
    long sum = 0;

    for(int i = 1; i

1 votes

Je doute que Java soit Python, donc ce n'est pas une réponse valide

0 votes

Votre réponse n'est pas pertinente par rapport à la question

-11voto

cschorn Points 557

La manière la plus simple de tester si un nombre est un entier est int(x) == x. Sinon, ce que David Heffernan a dit.

1 votes

Eh bien, cela pourrait être une réponse correcte à la question de savoir si un nombre est un entier, mais la question ici est de savoir comment vérifier si un nombre est divisible par un autre nombre...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X