递归计算给定数字中数字 8 的出现次数

Recursively count the occurences of 8 as a digit in a given number

给定一个非负整数 n,递归地(无循环)计算 8 作为数字出现的次数,除了一个 8 和另一个紧邻其左边的 8 计数加倍,所以 8818 产生 4。注意mod (%) 除以 10 得到最右边的数字(126 % 10 是 6),而除以 (/) 除以 10 会删除最右边的数字(126 / 10 是 12)。

我试过了,我的代码在下面。还请让我知道我在代码中做错了什么。提前谢谢了!!忽略 main()。

计数 8(8) → 1

计数 8(818) → 2

count8(8818) → 4

public int count8(int n) {
  
  int cd=0,pd=0,c=0;  // cd for current digit, pd for previous digit,c=count
  
  if(n==0)           // base condition
    return 0;
  
  cd = n%10;       // finding the rightmost digit
  
  if(cd==8)// if rightmost digit id 8 then
  {
    c++;
  
    n=n/10;// moving towards left from rightmost digit
  
    if(n!=0)
      pd=n%10;//second rightmost digit(similarly as secondlast digit)
  
    if(cd==8 && pd==8)// if rightmost and second rightmost equals 8, double c
      c=c*2;
  }     
  else         // if cd not equals 8 then
    c=0;
  
  return c + count8(n/10);//adding count and recursively calling method  
}
            Expected    Run     
count8(8) → 1             1 OK  
count8(818) → 2           2 OK  
count8(8818) → 4          3 X   
count8(8088) → 4          3 X   
count8(123) → 0           0 OK  
count8(81238) → 2         2 OK  
count8(88788) → 6         4 X   
count8(8234) → 1          1 OK  
count8(2348) → 1          1 OK  
count8(23884) → 3         2 X   
count8(0) → 0             0 OK  
count8(1818188) → 5       4 X   
count8(8818181) → 5       4 X   
count8(1080) → 1          1 OK  
count8(188) → 3           2 X   
count8(88888) → 9         5 X   
count8(9898) → 2          2 OK  
count8(78) → 1            1 OK  

我会再简化一点

public int count8(int number, bool prevWas8 = false) 
{
    int num8s = 0;

    if( number == 0) //base case
        return 0;

    if( number%10 == 8) //we found an 8!
        num8s++;

    if (prevWas8 && num8s > 0) // we found two 8's in a row!
        num8s++;

    return num8s + count8(number/10, num8s>0);
}
public int count8(int n)
{
    if(n == 0)
        return 0;
    if(n % 10 == 8)
    {
        if(n / 10 % 10 == 8)
            return 2+count8(n/10);
        return 1+count8(n/10);
    }
    return count8(n/10);
}
public int count8(int n) {
  int c=0;
  if (n==0){
    return 0;

  }
  else{
    if (n%10==8 && (n/10)%10==8){
      c+=2;
    }
    else if (n%10==8 && (n/10)%10!=8){
      c++;
    }
  }
  return c+count8(n/10);
}

如果你想要简单:

public int count8(int n) {

    return (n < 8) ? 0 : ((n % 10 == 8) ? ((n % 100 == 88) ? 2 : 1) : 0) + count8(n / 10);
}