2 回答

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

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”,盡管我喜歡這個想法。
添加回答
舉報