onlytry_
onlytry_
采纳率50%
2016-03-08 13:40

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

已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

11条回答

  • u013596119 u52983610 5年前

    试下这个吧,。要跑很久

     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));
        }
    }
    }
    
    点赞 评论 复制链接分享
  • Eternity_null Eternity_null 5年前

    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

    点赞 1 评论 复制链接分享
  • lx624909677 lx624909677 5年前
     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吧

    点赞 评论 复制链接分享
  • jixushashade jixushashade 5年前

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

    点赞 评论 复制链接分享
  • xsh179x Mr. XS 5年前

    用bigint类型来存储数据

    点赞 评论 复制链接分享
  • dongfeng9ge 东风玖哥 5年前

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

    点赞 评论 复制链接分享
  • xiong_pc TK-Xiong 5年前

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

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

    点赞 评论 复制链接分享
  • lrgdongnan 疯狂的指针 5年前

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

    点赞 评论 复制链接分享
  • lianshaohua ztenv 5年前

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

    点赞 评论 复制链接分享
  • u013596119 u52983610 5年前

    要等很久

     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));
        }
    }
    }
    
    点赞 评论 复制链接分享
  • Eternity_null Eternity_null 5年前

相关推荐