题解
用list保存数字的个 十 百 位数,因为 0-9 11-19 奇数与偶数是五五开,所以可以先 num/10 计算出有几个10,然后乘5 -1(只有一位时单独考虑);
然后计算 处个位外的 位之和
是偶数 的话,需要再加一个偶数 (ge)/2+1 (向上取整)
是奇数的话,需要加一个奇数, (ge+1)/2
代码
// 304 -0106-2180. 统计各位数字之和为偶数的整数个数
public int countEven(int num) {
ArrayList<Integer> list = new ArrayList<>();
int a=num;
for (int i = 0; i <3 ; i++) {
list.add(a%10);
a/=10;
}
int x=num/10;
int cnt=x!=0? x*5-1:0;
int baiAddTen=list.get(2)+list.get(1);
if (baiAddTen==0){
cnt+=Math.ceil((list.get(0)+1)/2.0)-1; // 向上取整 找0-ge 偶数的个数
return cnt;
}
if (baiAddTen%2==0){// 除个位外是偶数
cnt+=Math.ceil((list.get(0)+1)/2.0); // 向上取整 找0-ge 偶数的个数
}else {
cnt+=(list.get(0)+1)/2; // 找奇数的个数
}
return cnt;
}