#55117: 求大神幫忙找錯


ka79411.yt@gmail.com (Ray111-優質湖中人)


真的看了好多遍都不知道哪裡出錯了,求大神幫忙找錯,感激不盡!

#include <stdio.h>
#include <string.h>

#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define ABS(x) ((x) < 0 ? (-(x)) : (x))

typedef long long ll;

int run_case() {
  char n[25];
  if (scanf("%s", n) == EOF) {
    return 1;
  }

  int len = strlen(n);
  ll num = 0;
  for (int i = 0; i < len; i++) {
    num = num * 10 + (n[i] - '0');
  }

  int first_even_idx = -1;
  for (int i = 0; i < len; i++) {
    if ((n[i] - '0') % 2 == 0) {
      first_even_idx = i;
      break;
    }
  }

  if (first_even_idx == -1) {
    printf("0\n");
    return 0;
  }

  ll high = 0;
  ll low = 0;

  for (int i = 0; i < len; i++) {
    high *= 10;
    if (i < first_even_idx) {
      high += n[i] - '0';
    } else if (i == first_even_idx) {
      high += (n[i] - '0') + 1;
    } else {
      high += 1;
    }
  }

  for (int i = 0; i < len; i++) {
    low *= 10;
    if (i < first_even_idx) {
      low += n[i] - '0';
    } else if (i == first_even_idx) {
      low += (n[i] - '0') - 1;
    } else {
      low += 9;
    }
  }

  ll ans = MIN(num - low, high - num);
  printf("%lld\n", ans);

  return 0;
}

int main() {
  while (!run_case());
  return 0;
}