第一行输入整数
,表示测试用例数量。
随后
行,每行一个数字串
,长度
,保证所有用例数字串
的总长度
。
对每个用例输出 ``
`` 或 ``
``(大写),表示是否存在操作序列使得最终数字能被
整除。
9 123 322 333333333333 9997 5472778912773 1234567890 23 33 52254522632
NO YES YES NO NO YES NO YES YES
在第一组样例中,从整数中只能得到
、
、
和
,它们都不能被
整除。
在第二组样例中,需要将第二个数字替换为它的平方,那么就等于
。
在第三组样例中,整数已经可以被整除。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
scanner.nextLine(); // 吸收换行符
while (t-- > 0) {
String n = scanner.nextLine();
long sBase = 0; // 初始数字和
int cnt2 = 0; // 数字2的个数
int cnt3 = 0; // 数字3的个数
// 计算初始和及2、3的数量
for (char c : n.toCharArray()) {
int d = c - '0';
sBase += d;
if (d == 2) {
cnt2++;
} else if (d == 3) {
cnt3++;
}
}
boolean isGood = false;
// 枚举b的可能值(0, 1, 2),但不能超过实际数量cnt3
int maxB = Math.min(2, cnt3);
for (int b = 0; b <= maxB; b++) {
// 枚举a的可能值(0-8),但不能超过实际数量cnt2
int maxA = Math.min(8, cnt2);
for (int a = 0; a <= maxA; a++) {
// 计算当前总和:初始和 + 2a(每个2操作增加2) + 6b(每个3操作增加6)
long total = sBase + 2L * a + 6L * b;
if (total % 9 == 0) {
isGood = true;
break;
}
}
if (isGood) break;
}
System.out.println(isGood ? "YES" : "NO");
}
scanner.close();
}
}