7
votes

Comment implémenter la soustraction en utilisant uniquement une boucle et une augmentation

Ceci est une question d'entretien. Nous n'avons que deux constructions

  1. boucle (a) code> signifie boucle pendant une époque. li>
  2. incrément (a) code> incréments a. li> ol>

    Ainsi, pour implémenter A + B ONE pourrait écrire P>

    loop(a) {inc(b)} 
    return b;
    


4 commentaires

Non. J'ai marqué des questions d'entrevue.


Je pense que c'est impossible; Vous avez besoin d'une négation ou d'une fonction de décrément


Vous avez probablement des fonctions de comparaison également disponibles, oui? Si vos seules constructions sont vraiment bouclées et incrémentation, je pense que c'est impossible, mais avec une branche, vous pourriez le faire fonctionner.


Je conviens que la question n'est pas complètement définie. Je suppose que la comparaison doit être là, non? Outre comment avez-vous l'intention de le faire avec une ramification? Est-ce différent de celui que j'ai proposé?


5 Réponses :


0
votes

Nous recherchons x, de sorte que a-b = x. En d'autres termes A = B + X

pseudocode

int x = 0

tandis que (x <= a) do {

si (b + x == a) pause // satisfait a-b = x

x ++

}


0 commentaires

1
votes

dépend si cette architecture numérique est connue:

Vous pouvez profiter du mécanisme "Deux compliments" de l'architecture x86 / x64, p>

par exemple, si le schéma de numérotation signé est cyclique comme . p> xxx pré>

alors vous pouvez utiliser: p>

(a-b)
{
   loop(b) { dec(a) }
}


0 commentaires

11
votes

Que diriez-vous de

var a = 10;
var b = 8;
var result;

for (var _b = 0; _b < b; _b++) {
    var last = 0, times = 0, loopa = 0;
    for (var _a = 0; _a < a; _a++) {
        last = times;
        times = inc(times);
    }
    result = a = last;
}

function inc(i) {
    return i + 1;
}

print(result) // 2


2 commentaires

Si A = 2, il imprime 0. Vous avez besoin d'une fonction de négation.


Aye il va au sol des nombres négatifs, mais c'est aussi proche que vous pouvez obtenir, je pense que cela n'ait pas permis de négation



3
votes

Je pense que si la pause de la boucle est autorisée, A-B peut être effectuée de cette manière: xxx

réussite en supposant A> b.


1 commentaires

Mais encore une fois, vous ne pouvez utiliser que la boucle () et inc (). Vous ne pouvez pas utiliser == opérateur.



-1
votes
RESET B
INC B
LOOP A
{
    INC D
    LOOP B
    {
        RESET D
    }
}

0 commentaires