Schreiben Sie eine Funktion zum dividieren eine Zahl durch 3 ohne die Verwendung von /, % und * Operatoren. itoa() zur Verfügung?
Habe ich versucht, es zu lösen mich, aber ich konnte nicht bekommen keine Ahnung.
Mir bitte helfen, diese zu lösen.
- Wenn Sie erlauben, + und - ist es nicht sinnvoll, zu verhindern /, * und % verwenden. man kann drive-Funktion an. Oder + und - sollte auch verboten werden.. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie soll Verwendung itoa() für diese Aufgabe? Denn dann könnte man verwenden, um eine Konvertierung in eine Basis-3-string, löschen Sie das Letzte Zeichen, und dann wieder zurück zur Basis 10.
EDIT: UPS, habe ich falsch verstanden, der Titel ist Frage. Operator "multiplizieren" ist ebenfalls verboten.
Trotzdem glaube ich, dass es gut ist, nicht zu löschen diese Antwort für diejenigen, die nicht wissen, über die Aufteilung, indem Sie nicht die macht von zwei Konstanten.
Die Lösung ist, um zu multiplizieren, die durch eine Magische Zahl und dann das extrahieren der 32 leftmost bits:
Division durch 3 ist äquivalent zu vermehren, indem 1431655766 und dann shift um 32, in C:
Sehen Hacker ' s Delight Magische Zahl-Rechner.
/
,%
und*
".n += n
führtn * 2^1431655766
🙂>>
und+
schnell multiplizieren von großen zahlen. Zum Beispiel5*x == (x<<2) + x
. Ein langer Ausdruck, mit vielen<<
sollte in der Lage sein zu tun*1431655766
Mithilfe der mathematischen relation:
Wir haben
Wenn Sie können verwenden Sie nur 32-bit-Ganzzahlen,
Den
4/3 - 2/3
Behandlung verwendet wird, dax >> 1
istfloor(x/2)
stattround(x/2)
.x/3 = e^(ln(x) - ln(3))
Hier ist eine Lösung in C++ implementiert:
😉
EDIT: Getestet und funktioniert einwandfrei 🙁
Hoffe, dass dies geholfen. 🙂
number >= 3
da man diese:5:3=2
Klingt wie Hausaufgaben 🙂
Ich ein Bild Sie können eine Funktion schreiben, die iterativ teilt eine Zahl. E. g. Sie können Modell, was Sie tun, mit einem Stift und einem Stück Papier zu zahlen teilen. Oder Sie können verwenden Sie shift-Operatoren-und +, um herauszufinden, ob Ihre Zwischenergebnisse zu klein/groß und iterativ anwenden Korrekturen. Ich werde nicht schreiben Sie den code, aber ...
können Sie eine Eigenschaft aus der zahlen: Eine Zahl ist durch 3 teilbar, wenn Ihre Summe ist teilbar by3.
Nehmen Sie die einzelnen Ziffern von itoa() und dann mit switch-Funktion für Sie rekursiv mit Ergänzungen und itoa()
Hoffe, das hilft
Dies ist sehr einfach, so einfach, ich bin nur noch der Hinweis auf die Antwort -
Grundlegende Boolesche Logik-Gatter (und,oder,nicht,xor,...) nicht Sparte. Trotz dieses handicaps CPUs tun können. division. Ihre Lösung liegt auf der Hand: finden Sie einen Verweis, der Ihnen sagt, wie man einen divisor mit boolescher Logik und code schreiben, um zu realisieren, dass.
Wie wäre es damit, in eine Art von Python, wie pseudo-code. Es teilt die Antwort in einen ganzzahligen Teil und einen Bruchteil. Wenn Sie wollen, es zu konvertieren, um eine floating-point-Darstellung, dann bin ich nicht sicher der beste Weg das zu tun.
Beachten Sie, dass dies funktioniert nicht für negative zahlen. Um dies zu beheben, müssen Sie ändern Sie den Algorithmus:
für positive integer-division
Konvertieren 1/3 in binären
also 1/3=0.01010101010101010101010101
und dann einfach "multiplizieren" mit dieser Nummer, mit Verschiebungen und die Summe
Gibt es eine Lösung geschrieben am http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3776384&page=1&extra=#pid22323016
Bitte etwas darüber sagen, dass, vielen Dank:)
Langsam und naiv, aber es sollte funktionieren, wenn eine exakte Teiler existiert. Außerdem ist erlaubt, richtig?
Verlängerung für fractional-Teiler ist Links als übung für den Leser.
Im Grunde testen bei +1 und +2, denke ich...