给你一个正整数 num ,请你统计并返回 小于或等于 num 且各位数字之和为 偶数 的正整数的数目。
正整数的 各位数字之和 是其所有位上的对应数字相加的结果。
示例 1:
输入:num = 4
输出:2
解释:
只有 2 和 4 满足小于等于 4 且各位数字之和为偶数。
示例 2:
输入:num = 30
输出:14
解释:
只有 14 个整数满足小于等于 30 且各位数字之和为偶数,分别是:
2、4、6、8、11、13、15、17、19、20、22、24、26 和 28 。
提示:
1 <= num <= 1000
解题思路
直接模拟就行了。
-spec count_even(Num :: integer()) -> integer().
count_even(Num) ->
do_count(Num, 0)
.
do_count(1, Ans) ->
Ans;
do_count(Num, Ans) ->
case check_num(Num, 0) of
true ->
do_count(Num -1, Ans + 1);
_ ->
do_count(Num -1, Ans)
end.
check_num(0, Sum) ->
Sum rem 2 =:= 0;
check_num(Num, Sum) ->
check_num(Num div 10, Sum + Num rem 10).