Ich versuche, an eine Funktion in C zu denken, die die folgenden Bedingungen erfüllen würde:
Zum Beispiel:
53 kommt als 60 heraus.
197 kommt als 200 heraus.
4937 kommt als 5000 heraus.
Gibt es eine Möglichkeit, dies zu tun, so dass die Anforderung unabhängig von der Anzahl der abschließenden Nullen erfüllt ist?
Zum Beispiel verstehe ich, wie ich es in jedem einzelnen Fall tun könnte. divide 53 by 10 then ceil(), multiply by 10,
, aber ich möchte eine, die mit jedem Wert umgehen kann.
Meinungen? Ideen?
Es ist unnötig, die Zahl in eine Zeichenfolge und zurück zu konvertieren. Sie können dies mit der grundlegenden Modulo-Arithmetik und Multiplikation und Division tun.
Hier ist eine rein numerische Lösung, hoffentlich etwas effizienter in Bezug auf die Laufzeit:
%Vor%Logarithmen sind hier sehr hilfreich, um eine konstante Zeitantwort auf die "wie viele Nullen hat das?" bereitzustellen.
%Vor%nimmt die logarithmische Basis 10 und gibt Ihnen die Anzahl der Nullen, die in x sind.
Sie können dann die gelegentliche Redewendung C verwenden
(A + B-1) / B
um schnell die Obergrenze von A / B zu finden, die auf diese Weise die richtige führende Ziffer ergibt:
%Vor%Das ist Pseudocode, aber Sie sollten die Idee bekommen. Das Schlüsselverständnis ist, dass Logarithmen mathematisch bestimmen, wie viele Ziffern eine Zahl hat.
Nach Cocoa APIs:
%Vor%Nach typischem C-Stil, mathematisch:
%Vor%Ich bin mir nicht sicher, ob Sie rund oder ceil wollen. Aber das Verhalten, das Sie in der Frage zeigen, deutet auf ceil hin. Also habe ich das aufgenommen.
%Vor%BEARBEITEN
Der Code wurde geändert, um Ceil und andere zusätzliche Operationen zu entfernen.
BEARBEITEN 2
Behoben für Vielfache von 10.
Versuchen Sie, das erste Zeichen der Eingangsnummer zu nehmen, fügen Sie 1 hinzu und fügen Sie Nullen an.
%Vor%In VB, aber hoffentlich kommst du auf die Idee.
Einige Expertenratschläge, die Sie hier bekommen ... Um eine Anzahl i auf die nächsten 10 zu runden:
%Vor%Ähnlich für 100s, 1000s usw.