2的n次幂的Java实现
来源:互联网 发布:java语言发展历史 编辑:程序博客网 时间:2024/05/18 22:12
首先扯点别的:今天上海下雨了,不大,空气很清新,温度也很舒适,今晚可以睡个好觉了。
今天总结一些2的n次幂的算法实现,只讨论n>=0的情况。
如果n比较小的话,可以这样实现。
private static int calculate(int n) { if (n == 0) return 1; return 2 * calculate(n - 1); }
但是当n很大的时候,结果会超出int类型(能表示的最大的数为
核心思想就是使用一个字符串来表示一个整数进行计算和存储。
首先起始点是
当n不为0的时候,把str=“1”的每一位都转化成一个int类型的整数(从i=str.length()-1 位开始,i>=0位结束),然后和2相乘,把每位的计算结果转化成字符串累加,就可以得到最终的结果。
n=0 ;str0=”1”; 循环的初始值。
n=1 ; str0=”1”,字符串长度一位,转化成1*2 =2,结果重新赋值给str1=“2”;
n=2 ; str1=”2”,字符串长度一位,转化成2*2 =4,结果重新赋值给str2=“4”;
n=3 ; str2=”4”,字符串长度一位,转化成4*2 =8,结果重新赋值给str3=“8”;
n=4 ; str3=”8”,字符串长度一位,转化成8*2 =16,结果重新赋值给str4=“16”;
n=5 ; str4=”16”,字符串长度2位,从字符串的i=str.length()-1 ,即i=1位开始,转化成整数和2相乘 6*2=12,要进位1,结果str5的最后一位是“2”;现在i向前推,i=0;1*2=2,再加上刚才从低位进位的1,结果是3,所以str5的第0位就是“3”,最后str5=“32”;
完整的算法如下
public static void main(String args[]) throws Exception { String result = expString(2, 6); System.out.println(result); } private static String expString(Integer bottom, Integer var) { int i = 0; String str = "1"; while (i < var) { str = multiString(str, bottom); i++; } return str; } private static String multiString(String str, Integer var) { char[] c = str.toCharArray(); //结果可能和原数组一样长或者比原数组长度长1, 2的3次幂是8,2的4次幂就是16了 char[] result = new char[c.length + 1]; //temp用来表示是否有进位 int temp = 0; for (int i = c.length - 1; i >= 0; i--) { //48 是 0对应的ASCII码 int j = (int) c[i] - 48; int all = j * var; result[i + 1] = ((char) ((all % 10 + temp) % 10 + 48)); temp = (all + temp) / 10; } if (temp != 0) { //如果有进位 result[0] = (char) (temp + 48); } System.out.println(String.valueOf(result)); //去掉不需要的0 return String.valueOf(result).replaceAll("\u0000", ""); }
结尾:感觉自己叙述的不是很清楚,如果感觉有疑问,可以把代码拷贝下来,自己debug一下,一步一步分析理解。
- 2的n次幂的Java实现
- 2的n次幂
- 2 的 n 次幂
- 递归实现n的k次幂
- Java BigInteger求任意n(n∈N*)次方根的实现
- 计算2的n次幂
- 2的N次幂表示
- 十进制数转二进制形式并判断它是否为2的n次幂(Java实现)
- 快速计算x的n次幂 power()的实现
- BigDecimal的n次方根的实现
- 大数的N次幂
- r的n次幂
- x的n次幂
- 10 的 n 次幂
- 整数的n次幂
- x的n次幂
- x的n次幂
- 输入n,计算2的n次幂
- 淘淘商城系列——使用maven构建工程
- h5利用file将图片转为base64
- Git中解决重复输入用户名和密码
- FCC--Sorted Union(排序并集)
- origin2017
- 2的n次幂的Java实现
- 进程间的通信
- pexpect02-之ftp
- String的equals 和 ==
- 经典面试题:单链条反转的递归与非递归方法及分析[Java]
- javascript基础
- 四种遍历map的方法
- Android Studio 创建kotlin项目
- 通过偏旁信息改进中文字向量