给定一个非负整数int n,则递归计算(无循环),将8的出现次数计数为一个数字,除了8紧接其左边的8计数为两倍,因此8818产生4。请注意,mod(%)除以10将产生最右边的数字(126%10为6),而除以(/)除以10将除去最右边的数字(126/10为12)。
count8(8) → 1
count8(818) → 2
count8(8818) → 4
我的程序似乎无法计算双'8'。这是代码。
public int count8(int n) {
boolean flag = false;
if(n<10)
{
if (n==8)
{
if(flag == true)
return 2;
else
{
flag = true;
return 1;
}
}
else
{
flag = false;
return 0;
}
}
else
return count8(n%10)+count8(n/10);
}
我想知道最后一行是否出错,但是我不知道如何检查。期待您的帮助。谢谢!
最佳答案
将状态(前一位数字为8)传递给方法:
private static int count8(int n, boolean eight) {
if (n <= 0)
return 0;
else if (n % 10 == 8)
return 1 + (eight ? 1 : 0) + count8(n / 10, true);
else
return count8(n / 10, false);
}
public static int count8(int n) {
return count8(n, false);
}