0

目前我正在对平衡数字的代码战进行挑战,我在 dart 中编写了代码,它成功完成了 100 个测试用例,但是对于长数字它不能正常工作......所以我认为它需要一些条件来处理这个长数字:

String balancedNum(numb) {
  // your code here
  var numb1 = numb.toString();
  List a = numb1.split("");

  var left_sum = 0;
  var right_sum = 0;

  for (var i = 0; i <= a.length / 2; i++) {
    left_sum += int.parse(a[i]);
  }

  List<String> b = a.reversed.toList();

  //print(b);

  for (var i = 0; i < b.length / 2; i++) {
    right_sum += int.parse(b[i]);
  }

  //print(right_sum);

  if (left_sum == right_sum) {
    return 'Balanced';
  } else {
    return 'Not Balanced';
  }
}

挑战链接:https ://www.codewars.com/kata/balanced-number-special-numbers-series-number-1/train/dart

在此处输入图像描述

4

2 回答 2

1

您的问题与“长数字”无关,因为您对使用数字的测试用例进行编码也失败了13

您正确地没有阅读以下规则:

  • 如果数字有奇数位,则只有一个中间数字,例如 92645 的中间数字为 6;否则,有两个中间数字,例如 1301 有中间数字 3 和 0

  • 在确定一个数是否平衡时,不应考虑中间数字,例如 413023 是一个平衡数,因为左和右和都是 5。

因此,您需要测试数字是偶数还是奇数,因为我们需要使用该信息来知道我们应该在每边的总和中使用多少位数。

我在以下实现中做到了这一点:

String balancedNum(int numb) {
  final numb1 = numb.toString();
  final a = numb1.split("");
  var split = (a.length / 2).floor();
  
  if (a.length % 2 == 0) {
    split--; // the number is even
  }

  var left_sum = 0;
  var right_sum = 0;

  for (var i = 0; i < split; i++) {
    print(a[i]);
    left_sum += int.parse(a[i]);
  }

  final b = a.reversed.toList();

  for (var i = 0; i < split; i++) {
    right_sum += int.parse(b[i]);
  }

  if (left_sum == right_sum) {
    return 'Balanced';
  } else {
    return 'Not Balanced';
  }
}
于 2019-11-24T14:56:04.823 回答
1

由于一个简单的逻辑错误,编译器对代码的判断是错误的答案。

这是因为列表的长度没有正确计算

请看下面的更正代码,它通过了平台上的所有 110 测试:

String balancedNum(numb) {
      // your code here
      var numb1 = numb.toString();
      List a = numb1.split("");

      var left_sum = 0;
      var right_sum = 0;

      double d = ((a.length-1) / 2);
      int len = d.floor();

      print(len);

      for (var i = 0; i < len; i++) {
            left_sum += int.parse(a[i]);
      }

      List<String> b = a.reversed.toList();

      print(b);

      for (var i = 0; i < len; i++) {
            right_sum += int.parse(b[i]);
      }

      print(left_sum);
      print(right_sum);

      if (left_sum == right_sum) {
                return 'Balanced';
      } else {
                return 'Not Balanced';
      }
}
于 2019-11-24T14:58:06.677 回答