Wednesday, July 2, 2014

DivisorDigits

Problem:

TopCoder Problem Statement - DivisorDigits

Overview:

Determine which digits in a number evenly divide the number.

Java Source:
01: /*
02: TopCoder
03: Single Round Match: 148
04: Division: 2
05: Level: 1
06: Points: 250
07: 
08: Single Round Match 215
09: Division: 2
10: Level: 1
11: Points: 250
12: 
13: Description: http://community.topcoder.com/stat?c=problem_statement&pm=1741
14:  */
15: 
16: public class DivisorDigits {
17: 
18:     public int howMany(int number) {
19: 
20:         int count = 0;
21: 
22:         // Convert the number parameter into a char array
23:         char[] digits = new String("" + number).toCharArray();
24: 
25:         // Test each digit to see if it evenly divides number
26:         for (char c : digits) {
27: 
28:             // Convert the character into an int
29:             int i = Integer.valueOf(c) - '0';
30: 
31:             // Don't try to divide by 0.
32:             if (i == 0) { continue };
33: 
34:             if ((number % i) == 0) {
35:                 count++;
36:             }
37:         }
38: 
39:         return count;
40:     }
41: }
Notes:

On line 23, we convert the "number" parameter into a char array. This makes it easy for us to iterate through each digit. Line 26 handles the iteration, and line 29 converts each of the chars into an int. Be careful here to subtract off the value of '0' - otherwise your digit will be 48 greater than you expect!

Then, it's just a matter of seeing if the digit divides the number evenly. This is done on line 34 using the mod operator %.

No comments:

Post a Comment