亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

求乘法后的最后2位數字

求乘法后的最后2位數字

白豬掌柜的 2024-01-17 17:06:57
我有一個整數數組,我的任務是將所有這些數字相乘后得到最后 2 位數字。我想出了下面的代碼:static void process(int array[]) {    if (array.length <= 0) {        System.out.println("-1");        return;    }    int answer = array[0] % 100;    for (int i = 1; i < array.length; i++) {        answer = (answer * array[i] % 100) % 100;    }    System.out.println(answer);}我覺得這是一種更好的方法,但是當我在一次考試中使用它時,它只通過了四分之二的測試用例。由于性能問題,測試用例失敗。失敗的測試用例被隱藏,因此無法看到它們。我什至嘗試了另一種方法,例如將 long 變量初始化為 1,然后使用 for 循環并將 long 變量與數組元素相乘。最終從 long 變量中獲取最后兩位數字,即使在 2 個測試用例中也失敗了。有沒有更好的方法來解決這個問題。
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

有一些潛在的捷徑。乘以一個以 0 結尾的數字或兩個分別以 2 和 5 結尾的數字將保證最后一位數字為 0。這樣做兩次會使最后兩位數字為 00,您可以提前打印結果。您可以檢查您的答案是否為 00,如果發生這種情況則跳出循環。


這會減慢針對針對此檢查定制的數據的算法。然而,一個大的(>1000)隨機數字集幾乎可以保證提前以 00 結束,并且比您最初的方法更快。


示例代碼:


static void process(int array[]) {

  if (array.length <= 0) {

      System.out.println("-1");

      return;

  }

  int answer = array[0] % 100;


  for (int i = 1; i < array.length; i++) {

    if(answer == 0) {

       break;

    }

    answer = (answer * array[i] % 100) % 100;

  }


  System.out.println(answer);

}


查看完整回答
反對 回復 2024-01-17
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

您確定這是由于性能問題嗎?如果是,那么我認為這是一個愚蠢的問題,因為 O(n) 是你能得到的最好的。


我的猜測是因為你的答案不正確。例如,如果您的答案是“1”,那么它實際上可能是“01”。因此,正確的實施會考慮到這一點。


boolean atLeast10 = false;

int answer = 1;

int i = 0;

for (; i < array.length && !atLeast10; i++) {

    if (array[i] == 0) {

        System.out.println(0);

        return;

    }

    answer = answer * array[i];

    if (answer >= 10)

        atLeast10 = true;

}

answer = answer % 100;

for (; i < array.length; i++) {

    if (array[i] == 0) {

        System.out.println(0);

        return;

    }

    answer = (answer * array[i] % 100) % 100;

}

if (!atLeast10 || answer >= 10)

    System.out.println(answer);

else

    System.out.println("0" + answer);

順便提一句。僅當元素為 0 時才可能使用快捷方式,這又是因為即使數字以“00”結尾,數組中也可能后面跟著一個 0,然后答案是“0”而不是“00”,盡管我喜歡這個想法。


查看完整回答
反對 回復 2024-01-17
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號