#include <stdlib.h>
// 辅助函数1:计算一个数中所有【奇数数位】的乘积
int get_odd_digits_prod(int n) {
n = abs(n);
if (n == 0) return 0; // 0 是偶数,没有奇数位
int prod = 1;
int has_odd = 0;
while (n > 0) {
int digit = n % 10;
if (digit % 2 != 0) {
prod *= digit;
has_odd = 1;
}
n /= 10;
}
return has_odd ? prod : 0;
}
// 辅助函数2:计算一个数中所有【偶数数位】的乘积
int get_even_digits_prod(int n) {
n = abs(n);
if (n == 0) return 0; // 0 本身就是偶数
int prod = 1;
int has_even = 0;
while (n > 0) {
int digit = n % 10;
if (digit % 2 == 0) {
prod *= digit;
has_even = 1;
}
n /= 10;
}
return has_even ? prod : 0;
}
void change_even_odd(int size, int a[]) {
int evens = 0;
int odds = 0;
// 1. 统计奇偶数的总个数
for (int i = 0; i < size; i++) {
if (a[i] % 2 == 0) {
evens++;
} else {
odds++;
}
}
// 2. 根据数量关系进行条件修改
if (evens > odds) {
// 偶数多:改变偶数
for (int i = 0; i < size; i++) {
if (a[i] % 2 == 0) {
a[i] = get_odd_digits_prod(a[i]);
}
}
} else {
// 奇数多或一样多:改变奇数
for (int i = 0; i < size; i++) {
if (a[i] % 2 != 0) {
a[i] = get_even_digits_prod(a[i]);
}
}
}
}