第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我想計算任何給定數(shù)字的二進制數(shù)的集合位。但是給定數(shù)字的范圍可以變化到 10^200

我想計算任何給定數(shù)字的二進制數(shù)的集合位。但是給定數(shù)字的范圍可以變化到 10^200

一只萌萌小番薯 2023-04-13 15:42:36
我想計算任何給定數(shù)字的二進制數(shù)的集合位。但是給定數(shù)字的范圍可以變化到 10^200。我嘗試使用 BigInteger 并使用 num.toString(2); 將 bigInteger 轉(zhuǎn)換為二進制字符串;但字符串的最大范圍是 2^31。知道我還能在這里使用什么。
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經(jīng)驗 獲得超13個贊

ABigInteger可以轉(zhuǎn)換為byte[]using?BigInteger.toByteArray()。

請注意,在該示例中int可以替換為。byte


查看完整回答
反對 回復 2023-04-13
?
楊__羊羊

TA貢獻1943條經(jīng)驗 獲得超7個贊

Stringin的最大范圍Java是2^31 - 1正確的,但這與它可以容納的數(shù)字的最大值無關(guān),而是與它可以包含的字符數(shù)有關(guān)。


也就是說,您不需要 BigInteger 來查找數(shù)字中設(shè)置的位數(shù)(即使對于很大的數(shù)字),只需記住查找數(shù)字的二進制表示的方法即可。


前任:


2|12|0

2| 6|0

2| 3|1

2| 1|-

所以從上面我們知道12的二進制表示是1100。如果知道數(shù)字的二進制表示,我們可以很容易地計算出設(shè)置位數(shù)。


來到這個問題,你知道你不能處理那么大的數(shù)字,所以使用一個字符串來存儲數(shù)字并執(zhí)行上面的方法。


要劃分存儲在字符串中的數(shù)字,請從數(shù)字的開頭部分開始劃分,即十進制數(shù)的最高有效位。檢查它是否向右傳播一個進位,您可以通過一個簡單的方式來做到這一點,&1它會告訴您這些數(shù)字的 LSB。最后,用 b 計算設(shè)置位的數(shù)量。


public class Expelliarmus{


    public static void main(String[] args) {

        String a = "9000000000000000000000000000000000000000000000000000000000000000000000000000000000000";//88 zeroes, you can test it for other numbers too

        System.out.println(fn(a,0L));

    }


    static long fn(String a, long b){ // Don't ask why I used long here

        if(a.length()==0) return b;

        if(a.length()==1 && a.charAt(0)=='1') return ++b;

        int n = Integer.parseInt(a.charAt(a.length()-1)+"");

        if((n&1)==1) ++b;

        a = divideMe(a);

        return fn(a,b);

    }


    static String divideMe(String a){

        int val = 0;

        String bb = "";

        for(int i=0;i<a.length();i++){

            int dup = 0;

            val = val*10 + Integer.parseInt(a.charAt(i)+"");

            if((val&1)==1) dup = 1;

            val = val/2;

            bb = bb + String.valueOf(val);

            val = dup;

        }

        if(bb.charAt(0)=='0') return bb.substring(1);

        return bb;

    }

}


查看完整回答
反對 回復 2023-04-13
?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

bitCount()您可以使用以下方法:


    // So, we create a big number

    BigInteger num = new BigInteger("10");

    num = num.pow(200);


    System.out.println(num.bitCount());

只是為了好玩,您可以測試它是否為您提供了正確的數(shù)字:


    String binaryNum = num.toString(2);


    System.out.println(binaryNum);

    System.out.println(binaryNum.chars().filter(c -> c == '1').count());


查看完整回答
反對 回復 2023-04-13
  • 3 回答
  • 0 關(guān)注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號