2010-11-30 26 views
2

Ok, also für ein Programm muss ich zwei Fakten wissen, die Länge der Eingabe und welche höchste Zahl diese Länge ist am nächsten durch 4 teilbar. Zum Beispiel. Wenn die Länge 1 ist, möchte ich 4. aufzuzeichnen Wenn die Länge 3, I 4 aufnehmen möchten Wenn die Länge 5 ist, I 8.Mathematik in C/C++ - Rundungsfrage

Mathematisch aufzeichnen möchte, kann ich die Länge teilen, indem er 4, gibt dies eine Dezimalzahl. Wenn ich es abrichte und mal um 4, gibt es mir die Antwort, die ich brauche. Also, wie bekomme ich C, um den Inhalt eines Int aufzurunden? Ich könnte dies zu sehr komplizieren, also bitte sagen, wenn ich etwas Einfaches verpasst habe, dies zu tun.

Edit: Ich sollte hinzufügen, ich kenne bereits die Länge, das ist etwas, was ich selbst eingeben würde.

Antwort

8

(length+3)/4*4

+0

Sicher ist das nur ein Kreis? Add 3 bis 4, erhalten 7. Teilen durch 4. Dann mal um 4? – Draineh

+2

Integer Division rundet ab, so endet dies tun, was Sie wollen (7/4 = 1) –

+1

Genau das, was Chris sagte - ein int geteilt durch ein int ist ein int (mit dem Bruchteil abgeschnitten.) – NPE

4

Allzu kluge Antwort Vorteil der Tatsache, dass 4 ist eine Zweierpotenz:

long rounded = length + 3 & -4UL; 
+1

+1, aber ich würde gerne die Summe in Klammern sehen, auch wenn technisch nicht notwendig. Ohne sie ist es zu schlau :) –

+0

@Maciej: Ich versuche, den Lesern von SO-Operator einen Beitrag nach dem anderen zu vermitteln! –

+0

Vielen Dank für den Vorschlag, ich kann dies zu einem gewissen Zeitpunkt versuchen, nur um zu versuchen, die Mathematik zu verstehen! für jetzt habe ich eine funktionierende einfache Lösung :) – Draineh

2

Die intuitive Antwort gegeben Dies ist eine Potenz von 2 ist (length+3) & ~3

(nicht ~ 4 als vorherige Antwort vorgeschlagen. Wir maskieren die 1 und 2 Bits, die 3) hinzugefügt haben.