小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
示例1
输入
2 5
输出
3
说明
12, 123, 1234, 12345... 其中12, 123, 12345能被3整除。
这个解法太神奇啦
public static void ThreeSolution() {
// 神奇的解法,序号%3取余,若是2,0就能整除,1不能整除
// 例如:序号1 数字1余数1,不能整除;序号2数字12余数2,能整除;序号3数字123余数0,能整除
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int count = 0;
for (int i = a; i <= b; i++) {
switch (i % 3) {
case 1:
break;
case 2:
count++;
break;
case 0:
count++;
break;
default:
break;
}
}
System.out.println(count);
}
我做的太复杂了,超时了
public static void Dthree() {
Scanner sc = new Scanner(System.in);
int start = sc.nextInt();
int end = sc.nextInt();
int count = 0;
// 数字12,123,1234
while (start <= end) {
int k = 1;
String tempS = "";
for (int i = 1; i <= start; i++) {
tempS += i;
}
BigInteger temp = new BigInteger(tempS);
BigInteger bi2 = new BigInteger("3");
BigInteger[] bis = temp.divideAndRemainder(bi2);
// 判断是否等于0
if (BigInteger.ZERO.compareTo(bis[1]) != -1) {
count++;
}
start++;
}
System.out.println(count);
}