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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何修復(fù)計(jì)算二進(jìn)制數(shù)冪但經(jīng)常失敗的方法?

如何修復(fù)計(jì)算二進(jìn)制數(shù)冪但經(jīng)常失敗的方法?

郎朗坤 2023-11-01 16:32:45
我一直在亂涂亂畫(huà)這段小代碼,它應(yīng)該計(jì)算并打印出 2 的哪些冪可以總結(jié)為給定的數(shù)字。它適用于小的奇數(shù),但當(dāng)我希望它計(jì)算偶數(shù)或更大的數(shù)時(shí),它會(huì)丟失。我什至不知道我可以嘗試什么,代碼看起來(lái)不錯(cuò),但我可能一直沒(méi)有注意到。System.out.println("Give a number");    int gigaInt = si.nextInt();    String  gigaBit = Integer.toBinaryString(gigaInt);    String[] gigaBitArray = gigaBit.split(""); System.out.println("Binary: " + gigaBit); List<Integer> powers = new ArrayList<Integer>(); for(int counter = gigaBitArray.length-1; counter >= 0; counter--){        if (gigaBitArray[counter].equals("1"))            powers.add((int)Math.pow(2,counter));        else if(gigaBitArray[counter].equals("0")){            powers.add(0);        }    }    System.out.println("Powers: " + powers);所以,顯然,程序應(yīng)該計(jì)算冪,而且確實(shí)如此!在某些情況下...這里,當(dāng)給出 9給出一個(gè)數(shù)字 9 二進(jìn)制:1001 冪:[8, 0, 0, 1]但是當(dāng)我希望它計(jì)算偶數(shù)時(shí),它總是顯示“1”作為唯一的組成部分,如下所示:給出一個(gè)數(shù)字 8 二進(jìn)制:1000 冪:[0, 0, 0, 1]每當(dāng)被要求處理一個(gè)大數(shù)字時(shí),它就會(huì)變得完全瘋狂:給出一個(gè)數(shù)字 542 二進(jìn)制:1000011110 冪:[0, 256, 128, 64, 32, 0, 0, 0, 0, 1]如果您對(duì)此提出任何建議,我將非常感激。這可能只是一個(gè)幼稚的錯(cuò)誤,所以請(qǐng)指出。
查看完整描述

4 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊

您的代碼的問(wèn)題是您正在查看的數(shù)組索引。當(dāng)你輸入數(shù)字 8 時(shí),它的二進(jìn)制表示是 1000。當(dāng)你將它拆分成一個(gè)數(shù)組時(shí),你會(huì)得到:

索引:0 1 2 3 值:1 0 0 0

因?yàn)槟菑牧斜砟┪查_(kāi)始,所以索引 0 將最后處理(并且與 2^0 相同)。

要解決此問(wèn)題,您所需要做的就是反轉(zhuǎn)您正在查看的元素的順序,同時(shí)保持 for 循環(huán)的順序相同。例如:而不是:

gigaBitArray[counter]

它應(yīng)該是:

gigaBitArray[gigaBitArray.length -1 - counter]


查看完整回答
反對(duì) 回復(fù) 2023-11-01
?
蠱毒傳說(shuō)

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

您首先測(cè)試低位。如果您希望首先列出高階冪,則需要一個(gè)索引變量和一個(gè)冪變量。另外,無(wú)需檢查“0”。如果它不是“1”,那么它一定是“0”。


int iIndex;

int iLength = gigaBitArray.length;?

int iPower = iLength - 1;


for ( iIndex = 0; iIndex < iLength; ++iIndex, --iPower )

{

? ? if ( gigaBitArray[iIndex].equals("1") )

? ? {

? ? ? ? powers.add((int)Math.pow(2, iPower));

? ? }

? ? else

? ? {

? ? ? ? powers.add(0);

? ? }

}


查看完整回答
反對(duì) 回復(fù) 2023-11-01
?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊

0除了上面的兩個(gè)答案之外,您還可以通過(guò)將s 和s相乘來(lái)消除 if else 1:


int len = gigaBitArray.length;

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

     powers.add((int)Math.pow(2, --len)*Integer.parseInt(gigaBitArray[i]));

}


查看完整回答
反對(duì) 回復(fù) 2023-11-01
?
慕妹3242003

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊

這是一種方法。代碼中的注釋不明顯。這里的想法是計(jì)算機(jī)內(nèi)的所有信息都是binary。字符和數(shù)字是根據(jù) 打印出來(lái)的context。由于所有信息都是二進(jìn)制的,因此可以將shifted left or right位字段向相同方向移動(dòng)。這允許檢測(cè) a1或0bit,而無(wú)需求助于字符串操作的開(kāi)銷(xiāo)。


      for (int number : new int[] { 8, 10, 23, 11, 2, 4, 99

      }) {

         List<Integer> powers = new ArrayList<>();


         // starting bits to shift

         int shift = 0;

         // save number for printout

         int save = number;


         while (number > 0) {

            // ANDing the number with 1 will mask the

            // low order bit to a 1 or 0.

            // Then shift that bit "shift" number

            // of bits (first time thru is 0) and store

            // the power in p. Then increment # of bits

            // to shift.

            int p = (number & 1) << shift++;


            //add power to beginning of list.

            powers.add(0, p);


            // now shift the number right by 1 to position

            // for next bit.

            number >>= 1;


         }


         System.out.printf("%3d -> %s%n", save, powers);


      }

上面打印出以下內(nèi)容:


  8 -> [8, 0, 0, 0]

 10 -> [8, 0, 2, 0]

 23 -> [16, 0, 4, 2, 1]

 11 -> [8, 0, 2, 1]

  2 -> [2, 0]

  4 -> [4, 0, 0]

 99 -> [64, 32, 0, 0, 0, 2, 1]


查看完整回答
反對(duì) 回復(fù) 2023-11-01
  • 4 回答
  • 0 關(guān)注
  • 224 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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