zoukankan      html  css  js  c++  java
  • Java实现俄式乘法

    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
    
  • 相关阅读:
    MT【235】两道函数题
    MT【234】正方形染色(二)
    MT【233】染色正方形
    MT【232】展开式中的系数
    MT【231】棋子方法数
    MT【230】一道代数不等式
    MT【229】最小值函数
    MT【228】整数解的个数
    Python-list中的排序
    IO多路复用
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12948065.html
Copyright © 2011-2022 走看看