私は mpz (C) や BigInteger (Java) に似たクラスを書くことをいじっています。これはただの楽しみですので、私が自分で書いてはいけないことについては話さないでください。
私は次のようなクラスを持っています:
public class HugeInt
{
public List<Integer> digits;
public HugeInt(String value)
{
// convert string value into its seperate digits.
// store them in instance variable above
}
}
さて、このクラスの add() とsubtract() メソッドを実行するのはとても簡単です。次に例を示します。
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;
}
同様に、乗算を行うこともそれほど難しくありませんでした。
ウィキペディアにはDivision Algorithmsのページがありますが、私がやろうとしていることに対してどれが適切かわかりません。
これらの正の整数 (数字として表される) は任意の長さになる可能性があるため、数字単位以外で操作を実行しないようにする必要があります。
しかし、誰かが'sとして表される 2 つの数値の除算を行うための正しい方向に私を向けることはできますか? また、これは整数除算であるため、剰余は無視できます。List
<Integer
>