Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
实施";用java实现俄罗斯农民乘法_Java_Algorithm_Math - Fatal编程技术网

实施";用java实现俄罗斯农民乘法

实施";用java实现俄罗斯农民乘法,java,algorithm,math,Java,Algorithm,Math,以下是我所写的代码:我是一个初学者,代码效率不高。有人能检查一下我是否能改进它吗 以下是该方法的链接: 公共静态长RussianPeasantMult(长a、长b) { int-arraylen=1000; long[]results=新long[2][arraylen]; 结果[0][0]=a; 结果[1][0]=b; int指数=1; 而(结果[0][index-1]!=1) { 结果[0][index]=结果[0][index-1]/2; 结果[1][index]=结果[1][ind

以下是我所写的代码:我是一个初学者,代码效率不高。有人能检查一下我是否能改进它吗

以下是该方法的链接:

公共静态长RussianPeasantMult(长a、长b)
{   
int-arraylen=1000;
long[]results=新long[2][arraylen];
结果[0][0]=a;
结果[1][0]=b;
int指数=1;
而(结果[0][index-1]!=1)
{
结果[0][index]=结果[0][index-1]/2;
结果[1][index]=结果[1][index-1]*2;
索引++;
}
长和=0;

对于(int i=0;i您不需要将元素放入数组等。您可以使用位运算和更新累加器,如:

public static long RussianPeasantMult(long a, long b) {
    long sum = 0;
    while(a != 0) {
        if((a & 1) == 1) {
            sum += b;
        }
        a >>>= 1;
        b <<= 1;
    }
    return sum;
}
公共静态长RussianPeasantMult(长a、长b){
长和=0;
while(a!=0){
如果((a&1)==1){
总和+=b;
}
a>>=1;

b以什么方式改进它?在某些方面它是不正确的吗?我测试了它,它似乎是有效的。所以我在想也许我们可以提高时间复杂度或任何程序员必须的小技巧,使代码更加可移植、干净等等。在这种情况下,这个问题对于这个网站来说是离题的。它可能对我们的姐妹网站是好的,但请记住c发帖前检查一下。你应该边走边计算总和,而不是记住全部两列结果。当然,如果你记住了这些列,你就不需要分配或迭代1000行了!
public static long RussianPeasantMult(long a, long b) {
    long sum = 0;
    while(a != 0) {
        if((a & 1) == 1) {
            sum += b;
        }
        a >>>= 1;
        b <<= 1;
    }
    return sum;
}