3

可以通过递归方法计算整数中零的数量,该方法采用单个 int 参数并返回参数具有的零的数量。

所以:

zeroCount(1000)

将返回:

3

您可以通过执行以下操作从整数中删除最后一位数字:“12345 / 10”= 1234

您可以通过执行以下操作从整数中获取最后一位数字:“12345 % 10”= 5

这是我到目前为止所拥有的:

public static int zeroCount(int num)
{
    if(num % 10 == 0)
        return num;
    else
        return zeroCount(num / 10);
}

有没有人有任何帮助我解决这个功能的建议或想法?

4

15 回答 15

5
public static int zeroCount(int num)
{
    if(num == 0)
       return 0;

    if(num %10 ==0)
        return 1 + zeroCount(num / 10);
    else
        return zeroCount(num/10); 
}

这会工作

于 2012-11-08T05:29:40.743 回答
5

在你的脑海中运行你的代码:

zeroCount(1000)

1000 % 10 == 0,所以你要回来了1000。那没有意义。


只需弹出每个数字并重复:

这听起来像是家庭作业,所以我将把实际代码留给你,但可以这样完成:

zeroes(0) = 1
zeroes(x) = ((x % 10 == 0) ? 1 : 0) + zeroes(x / 10)

请注意,如果没有终止条件,它可以永远递归。

于 2012-11-08T05:23:35.033 回答
1

这里有三个条件:
1. 如果 number 是单个数字和 0 ,则返回 1
2. 如果 number 小于 10 即它是一个数字 1,2,3...9 则返回 0
3. 调用零递归(数字/10) + 零(n%10)

zeros(number){
  if(number == 0 ) //return 1
  if(number < 10) //return 0
  else
       zeros(number/10) + zeros(number%10)
}

n/10 将给我们从左边开始的 n-1 个数字,而 n%10 给我们一个数字。希望这可以帮助!

于 2019-09-05T16:57:02.317 回答
1

检查这个正整数:

 public static int zeroCount(int number) {
    if (number == 0) {
      return 1;
    } else if (number <= 9) {
      return 0;
    } else {
      return ((number % 10 == 0) ? 1 : 0) + zeroCount(number / 10);
    }
  }
于 2020-05-09T07:27:54.273 回答
0

这是一个简单的问题,您不需要进行递归我认为更好的方法是将整数转换为字符串并检查 char '0'

public static int zeroCount(int num)
{
String s=Integer.toString(num);
int count=0;
int i=0;
for(i=0;i<s.length;i++)
{
if(s.charAt(i)=='0')
{
count++;
}
}
return count;
}
于 2012-11-08T05:29:45.190 回答
0

您必须从 if 和 else 调用递归函数。此外,您还缺少一个基本案例:-

public static int zeroCount(int num)
{
    if(num % 10 == 0)
        return 1 + zeroCount(num / 10);
    else if (num / 10 == 0)
        return 0;
    else
        return zeroCount(num / 10);
}
于 2012-11-08T05:24:25.170 回答
0

你知道x % 10给你 x 的最后一位,所以你可以用它来识别零。此外,在检查特定数字是否为零之后,您想取出该数字,如何?除以 10

public static int zeroCount(int num)
{
  if(num == 0) return 1;      
  else if(Math.abs(num) < 9)  return 0;
  else return (num % 10 == 0) ? 1 + zeroCount(num/10) : zeroCount(num/10);
}

我使用 math.Abs​​ 来允许负数,你必须导入 java.lang.Math;

于 2012-11-08T05:51:05.230 回答
0
public static int count_zeros(int n)
{
    if(n<=9)
    {
        if(n==0)
        {  
            return 1;
        }
        else
        {
            return 0;
        }
    }

    int s=n%10;

    int count=0;

    if(s==0)
    {
        count=1;
    }

    return count+count_zeros(n/10);
}
于 2019-12-16T16:14:36.687 回答
0
static int cnt=0;
    public static int countZerosRec(int input) {
        // Write your code here
        if (input == 0) {
            return 1;
        }      
        if (input % 10 == 0) {
            cnt++;           
        }
        countZerosRec(input / 10);                  
        return  cnt;
    }
于 2021-05-18T07:43:41.180 回答
0
int check(int n){
    if(n==0)
        return 1;
    return 0;

}


int fun(int n)
{
    if(n/10==0)
    {
        if(n==0){
            return 1;
        }
        else{
                return 0;
    }
    }
    return check(n%10)+fun(n/10);

}
于 2020-02-29T14:23:10.820 回答
0

使用递归的 CPP 代码:

int final=0;
int countZeros(int n)
{
    if(n==0) //base case
    return 1;
    int firstn=n/10;
    int last=n%10;
    int smallop=countZeros(firstn);
    if(last==0)
        final=smallop+1;
    return final;
}
于 2021-05-23T14:33:26.380 回答
0
 int countZeros(int n){
     //We are taking care of base case 
if(n<=9){         
    if(n==0){
         return 1;
    }
 else
 {
     return 0;
 } 
}     
   int last=n%10;  //last element of number for e.g- 20403, then last will give 3
   int count=0;    //Initalsizing count as zero
   if(last==0){    //We are checking either the last digit is zero or not if it will 
        will update count from 0 to 1
     count=1;
  }
    return count+countZeros(n/10);  //Recursive call 
   } 
于 2020-02-09T04:09:55.583 回答
0

看看这个,这是我想出的解决方案。

int countZeros(int input){
//base case
if(input == 0){
    return 1;
}

int count = 0;
int lastDigit = input%10;
if(lastDigit == 0){
  count = 1;
}

//calc the smallInput for recursion
int smallInput = input/10;
//set smallAns = 0, if i/p itself is not 0 and no 0 is present then return smallAns = 0
int smallAns = 0;
//recursion call
if(smallInput != 0){
    smallAns = countZerosRec(smallInput);            
}

//if we get lastDigit = 0 then return smallAns + 1 or smallAns + count, else return smallAns  
if(lastDigit == 0){
    return smallAns+count;
}
else{
    return smallAns;
}}
于 2021-04-03T14:49:14.390 回答
0
import java.util.*;
public class Count
{
static int count=0;
static int zeroCount(int num)
{
  if (num == 0){
     return 1;
  }
  else if(Math.abs(num) <= 9)
  { 
     return 0;
  } 
  else
  {
     if (num % 10 == 0)
     { // if the num last digit is zero
        count++;
       zeroCount(num/10);
     } // count the zero, take num last digit out
     else if (num%10 !=0){
         zeroCount(num/10);
     }
  }
  return count;
  }

    public static void main(String[] args)
 {
  Scanner sc = new Scanner(System.in);
  System.out.print("Input: ");
  int num = sc.nextInt();
  System.out.println("Output: " +zeroCount(num));
  }  
  }
于 2018-06-29T18:13:03.580 回答
0
int countZeros(int n) 
{
if(n==0)
{
    return 1;
}
if(n<10) // Needs to be java.lang.Math.abs(n)<10 instead of n<10 to support negative int values
{
    return 0;
}
int ans = countZeros(n/10);
if(n%10 == 0)
{
    ans++;
} 
return ans;
}
于 2022-02-17T09:42:46.767 回答