所以我一直在研究这个BigNum乘法方法(简言之,方法需要一个BigNum其他方法,并且应该返回两个大正整数的乘积而不使用bigint类)一段时间,而且我几乎完成了然而,我仍然有问题附加零。我的帮助器方法似乎也没有正确添加(例如,444 * 4应该返回为“1776”,但它返回为“161616”)。我需要有人来调试这个,并帮助我找出为什么它不是加工。任何帮助表示赞赏。有些人可以帮我弄清楚为什么我的零不会追加?
这里的结果,当我尝试做444 * 444为例
预期的输出应该是我得到:
1776
17760
177600
197136
实际输出与我的代码:
161616
1616160
1616160
3393936
我方法
/**Multiplies two <tt>BigNum<tt> values together and returns a new
*<tt>BigNum<tt> object with the resulting value.
*
*@param other object
*@returns a new BigNum with resulting value
*/
public BigNum mult(BigNum other) {
BigNum tmp = new BigNum();
BigNum acc = new BigNum();
String s="";
int count=0;
for(int i= 0; i < other.num.length() ; i++) { //each digit x of other
tmp = this.mult(Character.getNumericValue(other.num.charAt(i)));
if(i > 0) {
for(int j=0; j < i; j++) {
s = tmp.num + "0";
}
}else {
s = tmp.num;
}
tmp=new BigNum(s);
count++;
acc = acc.add(tmp);
}
return acc;
}
/**Helper method that adds the other value a set of number of times, 0-9
*
*@param and int n and other object
*@returns resulting value
*/
public BigNum mult(int n) {
String result;
int carry;
if(n==0){
result="0";
}
else{
carry =0;
result = "";
}
for(int i=this.num.length()-1; i >=0; i--){
int temp = n * Character.getNumericValue(this.num.charAt(i))
result=(temp%10) + result;
carry = temp/10;
if(carry > 0){
result = carry + result;
}
}
return new BigNum(result);
}
此代码适用于更小的数字,但不适合较大的人(如果我做了类似1234567 * 9876543的事情就会中断) – user4147933 2015-02-24 04:52:20
是的,我现在意识到这是因为有人否定了答案。好的,您可以重写将值保存在int []中,例如:444应该作为新的int [] {4,4,4}存储。那么你的代码会更清晰,更易于理解 – 2015-02-24 04:55:47