Home > Blockchain >  Arrays: Find Numbers with Even Number of Digits
Arrays: Find Numbers with Even Number of Digits

Time:09-08

public class Nodigeven {
    static int even=0;
    static int count=0;
    static int findnodigeven(int[] arr) {
        for(int i=0;i<arr.length;i  ) {
            while(arr[i]!=0) {
                arr[i]= arr[i]/10;
                count  ;
            }
            if(count%2==0) {
                even  ;
            }
        }
return even;
        }
    public static void main(String[] args) {
        int[] arr = {122,255,133,14,15,16};
        System.out.println(findnodigeven(arr));
    }   
}

am getting wrong output i.e : 1 .. can you tell me where i am going wrong here in the code

CodePudding user response:

As far as I can tell you have two errors. The first is that you did not reset count to 0 for each iteration of the loop. The second is that you did not check the special case of 0 in the array. 0 is a single digit and thus odd. But since you never enter the while loop, count will remain 0 and even will be incremented.

public class Nodigeven {
    
    
    static int findnodigeven(int[] arr) {
        
        for (int i = 0; i < arr.length; i  ) {
            int count = 0;

            // check for 0 value and skip.
            if (arr[i] == 0) {
                continue;
            }
            while (arr[i] != 0) {
                arr[i] = arr[i] / 10;
                count  ;
            }
            if (count % 2 == 0) {
                even  ;
            }
        }
        return even;
    }
    
    public static void main(String[] args) {
        int[] arr = { 122, 255,0, 133, 14, 15, 16 };
        System.out.println(findnodigeven(arr));
    }
}

If you're interested you and do this without explicitly counting the digits. Use Math.log10() to get the count, again skipping 0 since the log of 0 is undefined. The number of digits in a decimal number N is Math.log10(N) 1. You can use the conditional operator to add 1 or 0 as appropriate to the parity count.

public class Nodigeven {
    static int even = 0;
    
    static int findnodigeven(int[] arr) {
        int even = 0;
        for (int i = 0; i < arr.length; i  ) {
            even  = arr[i] != 0 &&
                (int) (Math.log10(arr[i]) 1) % 2 == 0 
                          ? 1 : 0;
        }
        return even;
    }
    
    public static void main(String[] args) {
        int[] arr = { 122, 255,0, 133, 14, 15, 16 };
        System.out.println(findnodigeven(arr));
    }
}



CodePudding user response:

You need to change where you initialize count in your code - it never resets back to 0 and therefore the logic is incorrect for detecting if a number has an even number of digits.

public class Nodigeven {
    static int even = 0;
    static int findnodigeven(int[] arr) {
        for(int i = 0; i < arr.length; i  ) {
            int count = 0; // This variable was in the wrong spot!
            while(arr[i] != 0) {
                arr[i] = arr[i] / 10;
                count  ;
            }
            if(count % 2 == 0) {
                even  ;
            }
        }
        return even;
    }
    public static void main(String[] args) {
        int[] arr = {122,255,133,14,15,16};
        System.out.println(findnodigeven(arr));
    }   
}
  • Related