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

4 回答 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;
于 2013-10-16T17:00:13.420 回答
2
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);
    }
}
于 2013-10-16T17:28:03.703 回答
1

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

private static int numberOfDigits(NaturalNumber n) {
    if(n < 10) return 1;
    return 1 + numberOfDigits(n/10);
}
于 2014-10-12T19:56:20.800 回答
0

这里是 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;
}
于 2017-09-01T14:53:01.553 回答