猿问

我只是增加了反转数字的复杂性吗?

public class HelloWorld{


 public static void main(String []args){


    int  orig=103, reverse=0, mod;

    int numOfDigits=0;

    int n = orig;


    while (n>0){

        n /= 10;

        numOfDigits++;

    }

    n = orig;

    while (n > 0){

        mod = n % 10;

        reverse = reverse + (int)(mod * java.lang.Math.pow(10, numOfDigits-1));

        numOfDigits--;

        n /= 10;

    }


System.out.println("Reversed is : " + reverse);

 }

}


我知道reverse = reverse + (int)(mod * java.lang.Math.pow(10, numOfDigits-1));可以用reverse = mod + (reverse*10).


想知道我是否只是通过计算总位数和应用功率来增加简单程序的复杂性?


PS:请假设 orig 可以作为用户的输入,并且可以是任意数量的数字。我只为实验进行了硬编码。


翻翻过去那场雪
浏览 114回答 3
3回答

红糖糍粑

你没有增加复杂性……但你确实让它变慢了。表达式 pow(10, numOfDigits - 1)将大大慢于reverse = mod + (reverse * 10)Math.pow由于浮点不精确,使用代替整数乘法的计算也可能不准确。Adouble的精度只有 52 位,而 a 的精度为 63 位long。在这个例子中,这可能不适用,但一般来说这是需要警惕的

ABOUTYOU

可能,这将是具有较少迭代和复杂性的最佳方法: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));}}

德玛西亚99

计算乘法次数和加法次数:假设 f(x) = an * x^n + an-1 * x^n-1 + ... + a1 * x + a01. 如果通过计算 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)。
随时随地看视频慕课网APP

相关分类

Java
我要回答