2 回答
TA贡献1725条经验 获得超7个赞
有一些潜在的捷径。乘以一个以 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”,尽管我喜欢这个想法。
添加回答
举报