2 onlytry onlytry_ 于 2016.03.08 21:40 提问

大一新生妹子求救:求2的100万次方

求2的100万次方的值,不能使用java中的系统函数,这两天急用,关乎到进项目组锻炼的机会,谢谢大家了。

11个回答

u013596119
u013596119   Rxr 2016.03.08 22:24
已采纳

试下这个吧,。要跑很久

 import java.util.ArrayList;

public class Test {
    public static ArrayList<Integer> doubleIt(ArrayList<Integer> a){
        int addto=0;
        for(int i=0;i<a.size();i++){
            int left=(a.get(i)*2+addto)%10;
            addto=(a.get(i)*2+addto)/10;
            a.set(i, left);
            if(i==a.size()-1&&addto!=0){
                a.add(addto);
                break;
            }

        }
        return a;
    }
public static void main(String[] args){
    ArrayList<Integer> a=new ArrayList<Integer>();
    a.add(8);
    doubleIt(a);
    for(int i=1;i<999997;i++){
        a=doubleIt(a);
    }
    for(int i=a.size()-1;i>=0;i--){
        System.out.print(a.get(i));
    }
}
}
u013596119
u013596119 改次方的值可以改那个循环的999997,为次方-3,
接近 2 年之前 回复
lrgdongnan
lrgdongnan   2016.03.08 23:38

运用递归,递归方程式:
a^n=a^(n/2)*a^(n/2) 当n为偶数
=a^(n/2)*a^(n/2)*a 当n为奇数
如果不明白,明天我可以把代码发给你!

dongfeng9ge
dongfeng9ge int类型最大是二十多亿,远小于2的100万次方
接近 2 年之前 回复
u013596119
u013596119   Rxr 2016.03.08 22:07

要等很久

 import java.util.ArrayList;

public class Test {
    public static ArrayList<Integer> doubleIt(ArrayList<Integer> a){
        for(int i=a.size()-1;i>=0;i--){
            int addto=a.get(i)*2/10;
            int left=a.get(i)*2%10;
            a.set(i, left);
            if(addto==0){
                continue;
            }
            if(i==a.size()-1){
                a.add(addto);

            }else{
                a.set(i+1, a.get(i+1)+addto);

            }

        }
        return a;
    }
public static void main(String[] args){
    ArrayList<Integer> a=new ArrayList<Integer>();
    a.add(2);
    doubleIt(a);
    for(int i=1;i<99999;i++){
        a=doubleIt(a);
    }
    for(int i=a.size()-1;i>=0;i--){
        System.out.print(a.get(i));
    }
}
}
u013596119
u013596119 回复东风玖哥: 你这人怎么随便给人踩呢?这个问题本来就没什么答案的,时间复杂度n^2,1000000^2,时间来说根本不可行
接近 2 年之前 回复
u013596119
u013596119 回复东风玖哥: 用的是arraylist啊、、、不是int
接近 2 年之前 回复
dongfeng9ge
dongfeng9ge int类型最大是二十多亿,远小于2的100万次方
接近 2 年之前 回复
u013596119
u013596119 写错了。。。忽略这个。。。我先改改
接近 2 年之前 回复
u013596119
u013596119 写错了。。。忽略这个。。。我先改改
接近 2 年之前 回复
u013596119
u013596119 写错了。。。忽略这个。。。我先改改
接近 2 年之前 回复
Eternity_null
Eternity_null   2016.03.08 22:23

package face.test;

import java.util.Scanner;

public class BigNumber {
public static void main(String[] args) throws Exception {
int[] date = new int[10000];
date[1] = 1;
int weishu = 1; // 求出来的值的位数

    System.out.println("求2的n次方的值");
    System.out.print("n=");

    Scanner cin = new Scanner(System.in);
    int n = cin.nextInt();

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= weishu; j++) {
            date[j] = date[j] * 2;
        }

        // 确保除最高位外的每位不大于9
        for (int j = 1; j < weishu; j++) {
            if (date[j] >= 10) {
                date[j + 1] += date[j] / 10;
                date[j] = date[j] % 10;
            }
        }

        // 确保最高位不大于9
        while (date[weishu] >= 10) {
            weishu++;
            date[weishu] += date[weishu - 1] / 10;
            date[weishu - 1] = date[weishu - 1] % 10;
        }
    }

    System.out.print("2的" + n + "次方= ");
    for (int k = weishu; k >= 1; k--) {
        System.out.print(date[k]);
    }
    System.out.println("");
}

}

求2的n次方的值
n=100
2的100次方= 1267650600228229401496703205376

qq_30097359
qq_30097359
2 个月之前 回复
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.09 09:26

这个问题最大的难点是输出的数据类型不能是int,float,long,double等基本类型

u013596119
u013596119 谁都知道不能用int,还用你说?
接近 2 年之前 回复
xsh179x
xsh179x   2016.03.09 09:37

用bigint类型来存储数据

Eternity_null
Eternity_null   2016.03.08 21:55
onlytry_
onlytry_ 谢谢,我去看一下
接近 2 年之前 回复
Eternity_null
Eternity_null 回复Eternity_null: 看里面“为你断弦”的回答
接近 2 年之前 回复
Eternity_null
Eternity_null 回复Eternity_null: 上面加了中文,链接失效了。
接近 2 年之前 回复
Eternity_null
Eternity_null http://zhidao.baidu.com/link?url=HuMAt1BMmeHnYpZ0gf8cy3GMmDppUiJgo5HyN2nSIbcz2DPLlPJX0YBzPF5mEjRJ2Vc2QhYx3zdbxHgO54Q1cK
接近 2 年之前 回复
lianshaohua
lianshaohua   2016.03.08 23:24

用一个大数据处理库就能算出来,然后直接以常量形式写到项目中就行了

xiong_pc
xiong_pc   2016.03.09 00:35

如果是C++的话,应该是个大数问题,我一般面对这种问题要用数组,不过一般要算很久的...

——我是可爱的小尾巴 [url=http://blog.tk-xiong.com/]http://blog.tk-xiong.com/[/url]

jixushashade
jixushashade   2016.03.09 09:49

这个问题 主要从2 上入手 2进制嘛 1后边100万个0 然后转16进制 8进制 都很方便的

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片