java中进行乘法运算,java – 通过重复添加进行乘法运算

我试图通过重复添加来乘以两个数字数组.所以数字324 = [4,2,3]乘以24 = [4,2].我坚持的是迭代添加324和324,将其保存到数组中[8,4,6]然后重复添加过程以获得[8,4,6] [4,2,3]等等这是我到目前为止所做的:

BigInt result = new BigInt();

BigInt temp = new BigInt();

int sum = 0;

int carry = 0;

int size = digitList.size();

int k = 0; //k is our multiplier

for (int i = otherBigInt.digitList.size()-1; i >=0; i--) {

k = 10 * k + otherBigInt.digitList.get(i);

}

这是我逐位执行长时间添加的地方.

for (int i =0; i

sum = digitList.get(i) + digitList.get(i) + carry;

if (sum > 9) {

temp.digitList.add(sum%10);

carry=1;

} else {

temp.digitList.add(sum);

carry=0;

}

if (sum > 9 && i == size-1) {

temp.digitList.add(sum/10);

}

}

这是我被卡住的地方.我在这里要做的是将324添加到临时数组,然后将其答案分配给结果数组.从这里我将结果分配给临时数组,以便我可以添加到存储的结果.例如:digitlist = 324,temp = 324.结果= 648 – > digitList = 324,temp = 648.结果= 972.

我清除了结果数组,因此每次迭代都可以存储更新的结果.此时我得到一个nullpointerExeption,其中index = 0且size = 0.

for(int i=0;i<25;i++) {

result.digitList.clear();

for (int j=0; j

sum = digitList.get(j) + temp.digitList.get(j) + carry;

if (sum > 9) {

result.digitList.add(sum%10);

carry=1;

} else {

result.digitList.add(sum);

carry=0;

}

if (sum > 9 && j == size-1) {

result.digitList.add(sum/10);

}

}

temp.digitList = result.digitList;

}

return result;

}

这是一个家庭作业问题,但我已经坚持了一段时间.我要来的解决方案对于这么简单的任务来说似乎太复杂了,有人能引导我朝着正确的方向前进吗?

解决方法:

如果您使用其他变量名称来帮助您,可能会更容易:

BigInt input1 = new BigInt();

BigInt multiplier = new BigInt();

BigInt nextResult = new BigInt();

BigInt lastResult = null;

while ( ... notdone ... ) {

nextResult.digitList.clear();

if (lastResult==null) {

lastResult = input1;

} else {

... the addition logic: nextResult = lastResult + input1 ...

}

... the logic to remember that one addition step was done ...

lastResult = nextResult;

nextResult = new BigInt();

}

lastResult始终是上一次迭代的结果.你必须小心,你永远不会改变lastResult中的数字.当你从input1或nextResult分配它时,对lastResult的唯一更改必须是.

当你开始添加时,你的lastResult没有数据,因为没有“最后一次迭代”.在这种情况下,您可以使用input1初始化lastResult.

nextResult是您在添加迭代中工作并将新数字存储到的位置.完成该迭代后,将其设为lastResult并准备一个新的nextResult. (在您的代码中,您有时会使用临时值,有时会导致混乱,这会给您带来困惑.)

有趣的是,记住你已经计算了多远.例如,在第一次迭代后使用“5 x 3”得到结果,“3”变为“2”,因为剩下两次迭代.或者用“123×15”,“15”随着每次迭代首先减少到“14”,然后“13”,……“10”,“9”,…… a.s.o.

这与while条件中的“……未完成……”部分有关.

这里有一些可能的优化,我不想多说,因为这肯定是你的功课的一部分.可能你应该继续构建一些代码直到它工作.一路走来,你可能已经有了如何让事情变得简单的想法.如果您尝试在纸上执行添加步骤,它也可能会有所帮助.您可能会注意到哪些部分可以更容易地完成. (如果你没有找到优化,不要担心 – 这需要练习,有时大脑处于这种情绪中,有时候不是.你的结果必须是正确的,它们不应该“巧妙地优化”,然后有时是错误的. )

更新:关于变量和对象实例

您需要在变量和它们引用的对象之间做出改变.

nextResult = new BigInt();

这个陈述意味着两件事:1)你创建一个BigInt()实例和2)你用lastResult引用BigInt.

现在这句话:

lastResult = nextResult;

这仍然是BigInt,但现在lastResult和nextResult都指的是同一个BigInt.如果更改lastResult中的数字,则实际更改BigInt实例中的数字.并且由于nextResult和lastResult引用相同的BigInt,因此在获取数字时两者都将提供相同的值.

这也意味着您不需要复制数字.他们已经在那里了.

现在这个语句创建了一个BigInt的新实例:

nextResult = new BigInt();

现在在这三个语句之后,nextResult引用一个新的BigInt实例,它现在与lastResult中的BigInt不同.

标签:java,arrays

来源: https://codeday.me/bug/20190702/1359926.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值