首页 文章

使用递归计算自然数中的位数

提问于
浏览
2

我试图返回自然数的位数,我几乎就在那里 . 我不知道如何计算数字 .

private static int numberOfDigits(NaturalNumber n) {
    NaturalNumber zero = new NaturalNumber2(0);
    int a = 0;
    if (n.compareTo(zero) != 0) {
        a = n.divideBy10();
        numberOfDigits(n);           
    }
    return a;
}

我知道我将返回n的最后一个剩余部分,它是0,但我如何计算递归?

4 回答

  • 5

    如果您当前的 n 不为零,那么您有一位数加上数字中的位数除以10.提示:您不需要 a 变量 .

    if (n.compareTo(zero) != 0)
    {
        // Return 1 for the last digit (1) + the rest.
        return 1 + numberOfDigits(n.divideBy10());
    }
    // Base case.
    return 0;
    
  • 1
    private static int numberOfDigits(NaturalNumber n) {
        NaturalNumber zero = new NaturalNumber2(0);
        if (n.compareTo(zero) == 0) { 
            return 0;
        } else {
            n.divideBy10();
            return 1 + numberOfDigits(n);
        }
    }
    
  • 0

    如果要覆盖零,请使用以下内容 .

    private static int numberOfDigits(NaturalNumber n) {
        if(n < 10) return 1;
        return 1 + numberOfDigits(n/10);
    }
    
  • 2

    这是在C中

    int digits(int a, int c)
    {
      int d = -1;
      if (a<10 && a>0)
      {
        c = c+1;
        cout << "No of digits = " << c << endl;
      }
      else if (a%10 == 0) // correct
      {
        d = a/10;
        c++;
        if (d == 0)
        {
           cout << "No of digits = " << c+2 << endl;
           return c;
        }
        else { digits(d,c); }
      }
      else if (a>10 && a%10 != 0)
      {
        d = a/10;
        c++;
        if (d == 0)
        {
           cout << "No of digits = " << c+2 << endl;
           return c;
        }
        else { digits(d,c); }
    
      }
    
      return 0;
    }
    int main()
    {
        int n;
        cin >> n;
        int c1 = 0;
        digits(n,c1);
        return 0;
    }
    

相关问题