Problem:
Given a non-negative int n, compute recursively (no loops) the count of the occurrences of 8 as a digit, except that an 8 with another 8 immediately to its left counts double, so 8818 yields 4. Note that mod (%) by 10 yields the rightmost digit (126 % 10 is 6), while divide (/) by 10 removes the rightmost digit (126 / 10 is 12).
count8(8) → 1
count8(818) → 2
count8(8818) → 4
Solution:
public int count8(int n) { if (n < 1) return 0; if (n % 10 == 8 && (n / 10) % 10 == 8) return 2 + count8(n/10); else if (n % 10 == 8) return 1 + count8(n/10); else return count8(n/10); }
public int count8(int n) {
ReplyDeleteif(n == 0) return 0;
if(n % 10 == 8 && n % 100 == 88) return 2 + count8(n / 10);
if(n % 10 == 8) return 1 + count8(n / 10);
return count8(n / 10);
}
n % 10 == 8 && n % 100 == 88
Deletecan be simplified to just
n % 100 == 88
because if the 2nd statement is true, the first one is always true too.
that's what i did
Deletepublic int count8(int n) {
ReplyDeleteif (n < 10) return n == 8 ? 1 : 0;
if (n % 10 == 8 && (n / 10) % 10 == 8) return 2 + count8(n / 10);
return count8(n % 10) + count8(n / 10);
}
public int count8(int n) {
ReplyDeleteif(n == 0) return 0;
if(n % 100 == 88) return 2 + count8(n/10);
if(n % 10 == 8) return 1 + count8(n/10);
return count8(n/10);
}
public int count8(int n) {
ReplyDeleteint count = 0;
if(n == 0) return 0;
if(n%10 == 8) {
if((n/10)%10 == 8){
count++;
}
count++;
}
count += count8(n/10);
return count;
}
public int count8(int n) {
ReplyDeleteint count = 0;
if (n > 1) {
if (n>10) {
int newN = n/10;
if (n%10 == 8 && (newN%10) == 8) {
count += 2;
return count + count8(n/10);
}
}
if (n%10 == 8) {
count++;
return count + count8(n/10);
}
else {
return count + count8(n/10);
}
}
return count;
}
if(n<1) return 0;
ReplyDeleteif(n%100==88) return 2+count8(n/10);
if(n%10==8) return 1+count8(n/10);
else return count8(n/10);