Frage

Ich suche folgendes zu tun: Lassen Sie uns sagen, ich habe eine Zahl wie 125,625 => Ich möchte in der Lage sein, mein Programm zu sagen, dass 1 * 100 + 2 * 10 + 5 * 1 + 0,625. Wie könnte ich das bitte tun?

Dank

War es hilfreich?

Lösung

Wenn Sie Ihre Nummer als Integer haben, können Sie so etwas tun könnte:

value := 125.625
fractional part := value % 1
value := floor(value)

exponent = 1
listofvaluepairs = array()
while(value > 0)
{
  tmp_part := value % 10
  listofvaluepairs.add(value, exponent)
  exponent = exponent * 10
  value = floor(value / 10)
}

Das oben gezeigte psuedocode wird die listofvaluepairs mit Paaren der Ziffer und die Zahl zu multiplizieren füllen. So können Sie diese bekommen würde:

{{1,100}, {2,10}, {5,1}}

Und der Bruchteil hat das letzte Stück, das Sie wollten.

Als Referenz wird der Boden () gibt die Nummer ohne den Bruchteil geben, so Boden (1.6) ergibt 1. Die % (Modulo) Operator wird mehr oder weniger den Rest nach der Teilung geben. So 7% 2 = 1.

Was ich in dem obigen Beispiel zu tun (was sehr viel ist nicht Java-Code), ist eine Ziffer zu einer Zeit von dem Wert erhalten.

Also habe ich mit 125 beginnen:

125 % 10 = 5
Then:
floor(125 / 10) = floor(12.5) = 12

Dann wiederhole ich 2 und 1. Zur gleichen Zeit bekommen spare ich 1, 10 und 100 die Exponenten Variable.

Andere Tipps

double num = 125.625;
System.out.print(num - (int)num);
num = (int) num;

for (int i=10; num!=0; i*=10) {
    System.out.print(" + " + i/10 + " * " + (num % i)/i*10);
    num -= num % i;
}

Wird drucken:

0.625 + 1 * 5.0 + 10 * 2.0 + 100 * 1.0

Natürlich können Sie den Code ändern Sachen auf eine Datenstruktur hinzuzufügen.

Sie können jede Stelle erhalten, indem die Modulo oder % Operator in einer Schleife für den Integer-Wert mit (d.h .: int ones = myVal % 10) und den Bruchwert zu erhalten tun float fraction = val - (int)val;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top