【发布时间】:2010-02-25 23:30:18
【问题描述】:
我正在写一个类似于 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>
【问题讨论】:
-
+1:我非常喜欢这个问题。我会整理一个算法,只是为了好玩。
-
Knuth 的“半数值算法”非常详细地探讨了这个主题。
标签: c# java math division integer-division