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

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

试下这个吧,。要跑很久

 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));
    }
}
}

http://zhidao.baidu.com/link?url=HuMAt1BMmeHnYpZ0gf8cy3GMmDppUiJgo5HyN2nSIbcz2DPLlPJX0YBzPF5mEjRJ2Vc2QhYx3zdbxHgO54Q1cK这个地方有现成的。

要等很久

 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));
    }
}
}

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

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

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

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

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

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

用bigint类型来存储数据

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

 void main() 

{ 

int x[10000], c=0, cont=1, i, j, k; 

x[0]=1; 

scanf("%d", &k); 

for (i=0; i<k; i++) 

{ 

for(j=0; j<cont; j++) 

{ 

if (x[j]>=5) 

{ 

x[j]=2*(x[j]-5)+c; 

c=1; 

} 

else 

{ 

x[j]=2*x[j]+c; 

c=0; 

} 

} 

if (c==1) 

{ 

cont++; 

c=0; 

x[j]=1; 

} 

} 

for (i=cont-1; i>=0; i--) 

{ 

printf("%d", x[i]); 

} 

printf("\n"); 

} 

2的N次=1<<N,移位运算,直接输出1000000000N个0,转10进制,你再做超大数的二转10吧