算法笔记_040:二进制幂(Java)
目录
1 问题描述
使用n的二进制表示,计算a的n次方。
2 解决方案
2.1 从左至右二进制幂
此方法计算a的n次方具体思想,引用《算法设计与分析基础》第三版一段文字介绍:
具体代码如下:
package com.liuzhen.chapter6; import java.util.ArrayList;
import java.util.Scanner; public class LeftRightBinaryExponentiation {
//返回数字n的二进制数组
public int[] get10To2(int n){
ArrayList<Integer> list = new ArrayList<Integer>();
while(n > 0){
list.add(n % 2);
n = n / 2;
}
int len = list.size();
int[] result = new int[len];
for(int i = 0;i < len;i++)
result[i] = list.get(len-1-i);
return result;
} /*
* 函数功能:返回数字a的n次方结果
*/
public int getPowerA(int a,int n){
int[] nTwo = get10To2(n);
int result = a;
for(int i = 1;i < nTwo.length;i++){
result = result*result;
if(nTwo[i] == 1)
result *= a;
}
return result;
} public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入一个数字n:");
int n = in.nextInt();
System.out.println("请输入一个数字a:");
int a = in.nextInt();
LeftRightBinaryExponentiation test = new LeftRightBinaryExponentiation();
System.out.println("那么"+a+"的"+n+"次方结果:"+test.getPowerA(a, n));
}
}
运行结果:
请输入一个数字n:
10
请输入一个数字a:
2
那么2的10次方结果:1024 请输入一个数字n:
8
请输入一个数字a:
10
那么10的8次方结果:100000000
2.2 从右至左二进制幂
引用《算法设计与分析基础》第三版一段文字介绍:
具体代码如下:
package com.liuzhen.chapter6; import java.util.ArrayList;
import java.util.Scanner; public class RightLeftBinaryExponentiation {
//返回数字n的二进制数组
public int[] get10To2(int n){
ArrayList<Integer> list = new ArrayList<Integer>();
while(n > 0){
list.add(n % 2);
n = n / 2;
}
int len = list.size();
int[] result = new int[len];
for(int i = 0;i < len;i++)
result[i] = list.get(len-1-i);
return result;
}
//返回数字a的n次方结果
public int getPowerA(int a,int n){
int[] nTwo = get10To2(n);
int temp = a;
int len = nTwo.length;
int result;
if(nTwo[len-1] == 1)
result = a;
else
result = 1;
for(int i = len-2;i >= 0;i--){
temp = temp*temp;
if(nTwo[i] == 1)
result *= temp;
}
return result;
} public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("请输入一个数字n:");
int n = in.nextInt();
System.out.println("请输入一个数字a:");
int a = in.nextInt();
RightLeftBinaryExponentiation test = new RightLeftBinaryExponentiation();
System.out.println("那么"+a+"的"+n+"次方结果:"+test.getPowerA(a, n));
}
}
运行结果:
请输入一个数字n:
13
请输入一个数字a:
2
那么2的13次方结果:8192 请输入一个数字n:
8
请输入一个数字a:
10
那么10的8次方结果:100000000
算法笔记_040:二进制幂(Java)的更多相关文章
- 算法笔记_018:旅行商问题(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 Johson-Trotter算法 2.2.2 基于字典序的算法 1 问题描述 何为旅行商问题?按照非专业的说法,这个问 ...
- 算法笔记_019:背包问题(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 递归求解 2.2.2 非递归求解(运用异或运算) 2.3 动态规划法 1 问题描述 给定n个重量为w1,w2,w3,... ...
- 算法笔记_015:快速排序(Java)
目录 1 问题描述 2 解决方案 2.1 快速排序原理简介 2.2 具体编码 1 问题描述 给定一组数据,使用快速排序得到这组数据的非降序排列. 2 解决方案 2.1 快速排序原理简介 引用自百度百科 ...
- 算法笔记_230:运动员分组(Java)
目录 1 问题描述 2 解决方案 1 问题描述 有N个人参加100米短跑比赛.跑道为8条.程序的任务是按照尽量使每组的人数相差最少的原则分组.例如:N=8时,分成1组即可.N=9时,分成2组:一组 ...
- 算法笔记_136:交替字符串(Java)
目录 1 问题描述 2 解决方案 1 问题描述 输入三个字符串s1.s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成且不改变s1和s2中各个字符原有的相对顺序. 2 解决方案 ...
- 算法笔记_010:插入排序(Java)
1 问题描述 给定一组数据,使用插入排序得到这组数据的非降序排列. 2 解决方案 2.1 插入排序原理简介 引用自百度百科: 有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求 ...
- 算法笔记_039:杨辉三角形(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数. 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加. ...
- 算法笔记_041:寻找和为定值的多个数(Java)
目录 1 问题描述 2 解决方案 1 问题描述 输入两个整数n和sum,要求从数列1,2,3,...,n中随意取出几个数,使得它们的和等于sum,请将其中所有可能的组合列出来. 2 解决方案 上述问题 ...
- Java实现二进制幂
1 问题描述 使用n的二进制表示,计算a的n次方. 2 解决方案 2.1 从左至右二进制幂 此方法计算a的n次方具体思想,引用<算法设计与分析基础>第三版一段文字介绍: package c ...
随机推荐
- PHP 笔记——String 字符串
1. 定义 单引号括起来的字符串被原样输出. 双引号字符串中的变量被PHP解析为变量值. 2. 获取字符串长度 strlen(string $string): int 在utf-8下,汉字占3个字符, ...
- Java反射机制涉及的类常见方法使用总结
import java.lang.reflect.Constructor; import java.lang.reflect.*; /*Class:代表一个字节码文件的对象,每当有类被加载进内存,JV ...
- bzoj1393 旅游航道
Description SGOI旅游局在SG-III星团开设了旅游业务,每天有数以万计的地球人来这里观光,包括联合国秘书长,各国总统和SGOI总局局长等.旅游线路四通八达,每天都有总躲得载客太空飞船在 ...
- C# -- 学习笔记之基础篇
由于要做一个系统,需要用到搜索引擎开发的很多知识点.对于开发语言的选择,我一般不是擅长什么才选择什么的,而是通过对比之后,考虑开发时间和难易程度来选择.尽管现在的开发经验还不足,也只能凭借自己弱弱的判 ...
- Google Code Jam 2009 Qualification Round Problem A. Alien Language
https://code.google.com/codejam/contest/90101/dashboard#s=p0 Problem After years of study, scientist ...
- 原生+H5开发之:js交互【location方式】
1. 交互方式总结 1Android与JS通过WebView互相调用方法,实际上是: Android去调用JS的代码 JS去调用Android的代码 二者沟通的桥梁是WebView 对于Android ...
- extjs form textfield的隐藏方法
只需将textfield的hidden和hideLabel配置为true就可以了.只设置hidden:true时会显示出来一个:的标签. this.formpanel = new Ext.Fo ...
- 开源Word读写组件DocX介绍与入门
来源:http://i.cnblogs.com/EditPosts.aspx?opt=1 读写Offic格式的文档,大家多少都有用到,可能方法也很多,组件有很多.这里不去讨论其他方法的优劣,只是向大家 ...
- APP H5页面显示优化
在开发移动端APP页面时,对各操作系统各种型号的手机进行适配是必须的.然鹅,上周在开发完一个落地页后,被测试给打了回来,其中列出了一个在我看来很小的问题:单击进入页面的时候,页面还没加载完的时候字体显 ...
- MYSQL Out of resources when opening file './xxx.MYD' (Errcode: 24)
出现Out of resources when opening file './xxx.MYD' (Errcode: 24)错误是因为打开的文件数超过了my.cnf的--open-files-limi ...