码迷,mamicode.com
首页 > 编程语言 > 详细

算法笔记_027:俄式乘法(Java)

时间:2017-02-14 20:32:46      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:main   stat   ssi   迭代   解决   res   font   print   void   

1 问题描述

首先,了解一下何为俄式乘法?此处,借用《算法设计与分析基础》第三版上一段文字介绍:

 技术分享

技术分享

 

 


2 解决方案

具体编码如下:

package com.liuzhen.chapter4;

public class RussianPeasant {
    //方法1:递归求解
    public void recursionRussian(int m,int n,int result){
        if(m < 1)
            return;
        if(m == 1)
            System.out.println("使用递归求取m*n结果: "+(result+n));
        if(m % 2 == 0){
            m = m/2;
            n = n*2;
            recursionRussian(m,n,result);
        }
        else{
            result += n;
            m = (m-1)/2;
            n = n*2;
            recursionRussian(m,n,result);
        }
    }
    
    //方法2:迭代求解
    public int iterationRussian(int m,int n){
        int result = 0;
        while(m > 0){
            if(m % 2 == 0){
                m = m/2;
                n = n*2;
            }
            else{
                result += n;
                m = (m-1)/2;
                n = n*2;
            }
        }
        return result;
    }
    
    public static void main(String[] args){
        RussianPeasant test = new RussianPeasant();
        test.recursionRussian(50, 65, 0);
        System.out.println("使用迭代求取m*n结果:"+test.iterationRussian(50, 65));
    }
}

运行结果:

使用递归求取m*n结果: 3250
使用迭代求取m*n结果:3250

 

算法笔记_027:俄式乘法(Java)

标签:main   stat   ssi   迭代   解决   res   font   print   void   

原文地址:http://www.cnblogs.com/liuzhen1995/p/6398936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!