3 回答
![?](http://img1.sycdn.imooc.com/533e4d470001a00a02000200-100-100.jpg)
TA贡献1815条经验 获得超6个赞
你没有增加复杂性……但你确实让它变慢了。表达式 pow(10, numOfDigits - 1)
将大大慢于reverse = mod + (reverse * 10)
Math.pow
由于浮点不精确,使用代替整数乘法的计算也可能不准确。Adouble
的精度只有 52 位,而 a 的精度为 63 位long
。在这个例子中,这可能不适用,但一般来说这是需要警惕的
![?](http://img1.sycdn.imooc.com/533e4c5600017c5b02010200-100-100.jpg)
TA贡献1812条经验 获得超5个赞
可能,这将是具有较少迭代和复杂性的最佳方法:
public class NumReverse {
public long reverseNumber(long number){
long reverse = 0;
while(number != 0){
reverse = (reverse*10)+(number%10);
number = number/10;
}
return reverse;
}
public static void main(String a[]){
System.out.println("Reversed is: "+new NumReverse().reverseNumber(103));
}
}
![?](http://img1.sycdn.imooc.com/5458453d0001cd0102200220-100-100.jpg)
TA贡献1770条经验 获得超3个赞
计算乘法次数和加法次数:
假设 f(x) = an * x^n + an-1 * x^n-1 + ... + a1 * x + a0
1. 如果通过计算 1 来计算 f(x)一项一项,
它将需要 (n+1) + n + (n-1) + ... + 1 + 0 = (n+1)(n+2)/2 次乘法和 n 次加法。
2. 如果通过 计算 f(x) n = n*10 + mod
,
则需要 n 次乘法和 n 次加法。
当然,如果pow()
有一些优化,比如“分而治之”,复杂度pow()
应该是O(logN)。
添加回答
举报