我给了一个大整数(位数最多可以达到300000)。我应该找到整数的子串可以被4整除。 我的代码很慢。任何建议让它更快更值得赞赏。
+<hash>
答案 0 :(得分:1)
如果整数可以被4整除,则该数字小于10且以0,4或8结束;或者最后两位数可以被4整除。
如果字符串的第一个字符本身可被4整除,那么这就是您要计算的子字符串之一。
如果字符串中的位置i-1
和i
出现一对可分割的四位数字,那么如果数字以偶数开头,则会有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));