我正在写一个类似于 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的页面,但我不确定哪一个适合我正在尝试做的事情。
因为这些正整数(表示为数字)可以是任意长的,所以我想确保我不会尝试在逐个数字的基础上进行任何操作。
但是,任何人都可以为我指出正确的方向来对表示为的两个数字进行除法吗?另外,我可以忽略余数,因为这是整数除法。List
<Integer
>