例如,n = 8135267 => 16 这是一个解决方案,但我不明白。
int sumOddDigits(int n) {
if(n == 0)
return 0;
if(n%2 == 1) //if n is odd
//returns last digit of n + sumOddDigits(n/10) => n/10 removes the last digit of n
return n % 10 + sumOddDigits(n/10)
else
return sumOddDigits(n/10);
}
答案 0 :(得分:2)
整数十分之一“切断”最后一位数:I.e。 1234/10
会产生123
。
模10返回最后一位数:即1234%10
得到4
。
因此,上述代码始终考虑最后一位数。如果最后一个数字是奇数(因此是%2==1
个东西),它将被计算,否则不计算。所以,如果它应该计算数字,它需要最后一个数字(% 10
- 东西)并继续计算剩余的数字(递归/10
- 东西)并将它们添加到数字。如果不计算当前数字,它将继续使用剩余数字(因此递归和/10
- 东西)而不将其添加到当前数字。
如果参数为0,则表示遍历整数,因此函数以返回0结束。
答案 1 :(得分:1)
%是modulo运算符。它基本上找到除以数字的余数。
n%2 n只有1才是奇数。 %10得到除以10的剩余部分,这将获得当前的最后一位数字。整数除以10会得到下一个数字作为当前最后一位(1567/10 = 156)
答案 2 :(得分:0)
以这种方式思考:从8135267 => 16
的已知答案开始,如果我问你 * 3 * 8135267中奇数位的总和,那么你呢?如果我要求 * 4 * 8135267怎么办?您的手册步骤与该功能有何关系?
答案 3 :(得分:0)
这样想。如果你得到偶数,你的函数会返回它+没有那个数字的数字的函数值。否则返回没有最后一位数字的函数值。在你的例子中:
813526(7) -> 0 + sumEvenDigits(813526)
6 + sumEvenDigits(81352)
2 + sumEvenDigits(8135)
....
8 + sumEvenDigits(0)
0 = 16
希望这有帮助。
答案 4 :(得分:0)
int sum_odd_digits(int n)
{
int s=0,r=0;
if(n==0)
return 0;
r = n%10;
if(r%2==1)
s = s+r;
n=n/10;
return s+ sum_odd_digits(n);
}