Ich bin mit dem Schreiben einer Klasse ähnlich wie mpz (C) oder BigInteger (Java). Dies ist nur zum Spaß, also bitte nicht weiter darüber, wie ich nicht mein eigenes schreiben sollte.Wie kann ich Division in einem Programm, Ziffer für Ziffer durchführen?
Ich habe eine Klasse ähnlich wie:
public class HugeInt
{
public List<Integer> digits;
public HugeInt(String value)
{
// convert string value into its seperate digits.
// store them in instance variable above
}
}
nun das Add tun() und subtrahieren() -Methode dieser Klasse sind ziemlich einfach. Hier ein Beispiel:
private List<Integer> add(List<Integer> a, List<Integer> b)
{
List<Integer> smallerDigits = (compareDigits(a,b) < 0) ? a : b;
List<Integer> largerDigits = (compareDigits(a,b) >= 0) ? a : b;
List<Integer> result = new ArrayList<Integer>();
int carry = 0;
for(int i = 0; i < largerDigits.size(); i++)
{
int num1 = largerDigits.get(i);
int num2 = (i < smallerDigits.size()) ? smallerDigits.get(i) : 0;
result.add((num1 + num2 + carry) % 10);
carry = ((num1 + num2 + carry)/10);
}
if (carry != 0) result.add(carry);
return result;
}
In ähnlicher Weise macht die mehrfach nicht so schwer, entweder war.
Ich sehe auf Wikipedia gibt es eine Seite auf Division Algorithms, aber ich bin mir nicht sicher, welches für das, was ich versuche, geeignet ist.
Da diese positiven ganzen Zahlen (dargestellt als Ziffern) beliebig lang sein können, möchte ich sicherstellen, dass ich nicht versuche, irgendetwas anderes als Ziffer für Ziffer zu tun.
Kann aber jemand mich in die richtige Richtung für eine Division von zwei Zahlen, die als List
's dargestellt sind, zeigen? Außerdem kann ich den Rest ignorieren, da dies eine Integer-Division ist.<Integer
>
+1: Ich mag diese Frage sehr. Ich werde einen Algorithmus nur zum Spaß zusammenstellen. –
Knuths "Seminumerical Algorithms" geht ausführlich auf dieses Thema ein. –