Runden von ganzen Zahlen auf die nächsten zehn oder hundert in C

7

Ich versuche, an eine Funktion in C zu denken, die die folgenden Bedingungen erfüllen würde:

  • Es akzeptiert eine ganze Zahl größer als 0 als Argument;
  • Es wird diese Ganzzahl auf den nächsten Wert gerundet, sodass nur der erste Wert angezeigt wird Ziffer ist keine Null

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?

    
M. Ryan 15.01.2013, 18:54
quelle

12 Antworten

9

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%     
user529758 15.01.2013, 19:01
quelle
16

Vermeiden Sie Zeichenfolgenkonvertierungen und Schleifen:

%Vor%     
rmaddy 15.01.2013 19:04
quelle
2

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.

    
argentage 15.01.2013 19:08
quelle
1

Nach Cocoa APIs:

%Vor%

Nach typischem C-Stil, mathematisch:

%Vor%     
Anoop Vaidya 15.01.2013 19:08
quelle
1

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.

    
Pavan Yalamanchili 15.01.2013 19:07
quelle
0

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.

    
Brian Salta 15.01.2013 19:02
quelle
0

Ich würde die Zahl in eine Zeichenfolge umwandeln. Ermitteln Sie die Länge der Zeichenfolge.

Dann:

%Vor%     
Satish 15.01.2013 18:58
quelle
0

Sie können die Zahl durch zehn teilen, bis nur noch eine Ziffer übrig ist, und dann wieder auf die Größe multiplizieren:

%Vor%     
Guffa 15.01.2013 19:07
quelle
0

Das sollte es tun:

%Vor%     
Lee-Man 15.01.2013 19:41
quelle
0

Keine Schleifen.

%Vor%     
Clifford 15.01.2013 19:05
quelle
0
%Vor%     
Danny zadok 27.09.2014 07:28
quelle
-1

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.

    
user7153622 13.11.2016 17:32
quelle

Tags und Links