Java 递归解决 "仅仅能两数相乘的计算器计算x^y" 问题
/**
* 求一个数的乘方
* 求x^y,y是一个正整数。 设计算器仅仅能计算两数相乘,不能一次计算n个数相乘。 * 知:2^5=(2^2)^2*2; 2^6=(2^2)^3=((4)^2)*4; 2^8=(2^2)^4= (4^2)^2= 16^2
* 得到规律:x^y= (x^2)^(y/2),定义a=x^2,b=y/2, 则得到形如: x^y= a^b;
* y假设是奇数,则分解的最后还要再乘以a(如上面2^6分解成4^3时):x^y=a^b*x.
*
* 用递归来解:那么每次x都传入一个新的值。即是a。y值倍减,即是b
*
* @author stone
* @date 2015-7-2 上午11:31:53
*/
public class Power { private static long pow(long x, long y) {
if (x == 0 || x == 1) {
return x;
}
long tx = 0;
long ty = 0;
if (y > 1) {
ty = y / 2;
tx = x * x;
System.out.println(tx); if (y % 2 == 0) {
return pow(tx, ty);
} else {
return pow(tx, ty) * x;
}
} else {
return x;
}
} public static void main(String[] args) {
long result = pow(2, 10);
System.out.println(result);
}
}
Java 递归解决 "仅仅能两数相乘的计算器计算x^y" 问题的更多相关文章
- java两数相乘基础算法
下面是别人给我的代码: package com.bootdo; public class Test { public static void main(String[] args) { System. ...
- Python练习笔记——采用生成器函数实现两数之间的偶数计算
题目:编写一个生成器函数myeven(start, end),采用迭代器逐次实现[start, end)范围内的偶数计算2 4 6 8. ... def myeven(start, end): whi ...
- Python练习笔记——采用生成器函数实现两数之间的素数计算
题目:编写一个生成器函数myprimes(start, end),实现[start, end)范围内的所有素数计算2 3 5 7. ... 第一 常规函数方法 方法1 def myprime(num) ...
- python 用加法实现a,b两数相乘
"""思路:1.a * b = a + a + a + ... 2.a * b = n个a相加,只需求证b = n即可 3.用for 循环遍历即可,b就是range的最大 ...
- LeetCode01 - 两数之和(Java 实现)
LeetCode01 - 两数之和(Java 实现) 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum 题目描述 给定一个整数数组 ...
- C语言——<计算>_较大两个数相乘
例题:9876543210*1234567890 的乘积 分析:正常的数据结构已经无法满足这么大的数相乘的结果.只能使用数组来进行操作. 1.两个数都用字符数组来接收. 2.接收后,因为每一位要乘以另 ...
- Java实现 LeetCode 653 两数之和 IV - 输入 BST(递归,找差值)
653. 两数之和 IV - 输入 BST 给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 案例 1: 输入: 5 / \ 3 6 / ...
- LeetCode02 - 两数相加(Java 实现)
LeetCode02 - 两数相加(Java 实现) 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/add-two-numbers 题目描述 ...
- 【C语言】给一组组数,仅仅有两个数仅仅出现了一次,其它全部数都是成对出现的,找出这两个数。
//给⼀组组数,仅仅有两个数仅仅出现了一次.其它全部数都是成对出现的,找出这两个数. #include <stdio.h> int find_one_pos(int num) //找一个为 ...
随机推荐
- Python9-面对对象2-day23
#计算正方形的周长和面积 class Square: def __init__(self,side_len): self.side_len = side_len def perimeter(self) ...
- Knockout v3.4.0 中文版教程-2-监控-通过监控创建视图模型(上)
2. 监控 1.通过监控创建视图模型 1. 监控 Knockout是基于以下三个核心特性: 监控和依赖跟踪 声明式绑定 模板 在本节,你将第一次了解这三个特性,在这之前,我们先来了解以下MVVM模式和 ...
- python3--__getattr__和__setattr__捕捉属性的一个引用
__getattr__和__setattr__捕捉属性的一个引用 __getattr__方法是拦截属性点号运算.更确切地说,当通过对未定义(不存在)属性名称和实例进行点号运算时,就会用属性名称为字符串 ...
- hdu2081
#include <stdio.h> #include <malloc.h> int main(){ ]; char *p; int t; p=(); scanf(" ...
- BZOJ2780 [Spoj]8093 Sevenk Love Oimaster 【广义后缀自动机】
题目 Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXun was dat ...
- websql使用实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Linux(14):集群架构进阶 --- CentOS 7
CentOS 7 CentOS 7 管理软件常用命令: vim /etc/selinux/config # 修改 SELINUX 开机自启动与否 setenforce 0 # 关闭 SELINUX g ...
- uva 11916 解模方程a^x=b (mod n)
Emoogle Grid You have to color an M x N ( 1M, N108) two dimensional grid. You will be provided K ...
- Codeforces737E. Tanya is 5!
$n \leq 40$个人玩$m \leq 10$台游戏机,每台游戏机一秒内只能一人玩,每人一秒内只能玩一台.每台游戏机有个价格,在规定总价格内可以把一部分游戏机复制一次,每台只能复制一次.给每个人对 ...
- HDU 4474 Yet Another Multiple Problem【2012成都regional K题】 【BFS+一个判断技巧】
Yet Another Multiple Problem Time Limit: 40000/20000 MS (Java/Others) Memory Limit: 65536/65536 K ...