2的十万次幂怎么求?用Java做

这是一道作业。因为普通的求法内容会溢出,无法正常输出。所以回答前务必确定能正常输出。
提示可以用数组
大神求教一下,这是老师布置的作业,用Math.pow()或for循环10万遍,都不能输出,int,long存不了那么大的数。我是初学者,求教怎么算。

富国沪深
浏览 815回答 7
7回答

狐的传说

高精度算法 原理简单来说就是用数组来存数字,然后手工模拟竖式运算。 网上资料很多的,随便搜搜就知道了。

翻翻过去那场雪

因为对于Java不熟悉,且没有Java环境,我给你一个思路,定义一个长度为10000的数字,2作为初值传入数组的最后一位,然后两层循环,第一层循环为10000次,内部循环为数组存入字符的内容循环,对于存入内容的数组,每一位*2,如果大于10,就将进位存入前一位数组即可。结果集可以直接打印数组或者转成字符串输出。 我本想提供计算结果的,但是长度太长,超出评论范围了,我给你下计算结果的长度,让你用来做验证,计算结果的长度为30103位。

慕工程0101907

如果目的不是测试的,一种更基本的办法是用BigIneteger。例如:BigInteger.valueOf(2).pow(100_000);

侃侃无极

实现了一个,但是效率不高: import java.util.Arrays; public class Application { public static void main(String[] args) { // 计算2的10万次方 int[] num = new int[]{1}; for (int i = 0; i < 100000; i++) { //做10万次乘以2的计算 num = timesTwo(num); } System.out.println("result= "+Arrays.toString(num) .replace(", ","") .replace("[","") .replace("]","")); } public static int[] timesTwo(int[] num) { //对最新一个结果,从最低位开始每一位都乘以2,并存储其值 for (int i = num.length -1; i >= 0 ; i--) { num[i] *= 2; } //从最低位开始检查每一位是否溢出,并处理溢出 for (int i = num.length -1; i >=0 ; i--) {//判断是否大于等于10 //如果溢出 if (num[i] >= 10) { //设置当前位的值 num[i] -= 10; //如果当前位刚好是最高位 if (i==0){ //扩大数组 int[] temp = new int[num.length+1]; //复制旧数组数据 System.arraycopy(num,0,temp,1,num.length); //最高位为1 temp[0] = 1; //引用新扩大后的数组 num = temp; }else{ //当前位的左边一位加1 num[i-1] += 1; } } } return num; } }

拉风的咖菲猫

用数组模拟一个二进制数字,幂次就往数组最后插0。 最后得出一个二进制的数组。然后二进制数组转十进制字符串。

白板的微信

初学者被布置这样的作业,老师的意思应该不是让你自己实现一个方法。import java.io.File;import java.io.PrintStream;import java.math.BigInteger; public class A { public static void main(String[] args) { try { String s = new BigInteger("2").pow(100000).toString(); //打印到d盘num.txt中,因为数字太长控制台打印不下 System.setOut(new PrintStream(new File("d:\\num.txt"))); System.out.print(s); } catch(Exception e){ e.printStackTrace(); } } }

慕无忌1623718

关闭吧。。。笑尿
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java