更快速地检查大整数的子串

时间:2016-02-20 10:40:42

标签: java

我给了一个大整数(位数最多可以达到300000)。我应该找到整数的子串可以被4整除。 我的代码很慢。任何建议让它更快更值得赞赏。

+<hash>

2 个答案:

答案 0 :(得分:1)

如果整数可以被4整除,则该数字小于10且以0,4或8结束;或者最后两位数可以被4整除。

如果字符串的第一个字符本身可被4整除,那么这就是您要计算的子字符串之一。

如果字符串中的位置i-1i出现一对可分割的四位数字,那么如果数字以偶数开头,则会有i + 1个带有该后缀的子字符串如果数字以奇数开头,则为数字和i子串。

因此,您可以按如下方式计算可被4整除的子串数:

int v = 0;
long cnt = 0;
for (int i = 0; i < s.length(); ++i) {
  int w = Character.digit(s.charAt(i), 10);
  if ((v * 10 + w) % 4 == 0) {
    cnt += i;
  }
  if (w % 4 == 0) {
    ++cnt;
  }
  v = w;
}

答案 1 :(得分:0)

BigInteger sumOfAll = new BigInteger("123232312321321412343213421321321312");
System.out.println("First Ten Digits: " + sumOfAll.toString().substring(0, 10));