每个整数都希望可以整除很多数字,特别是它自身包含的数字,我们将整数分为三类:
1. 数字可以整除它包含的一部分数字,比如72,由,7和2两种数字组成,72可以整除2,我们称这个数字是开心的,用”H”表示。
2. 数字不能整除它包含的任何数字,比如73,由,7和3两种数字组成,73不能整除任何数,我们称这个数字是沮丧的,用”S”表示。
3. 数字可以整除它包含的所有数字,比如12,既可以整除1又可以整除2,我们称它是一个非常棒的数,用“G”表示。 (0可以被任何数整除。)
输入描述:
输入第一行包含一个整数T,表示数据组数(1<=T<=100). 接下来T行,每行包含一个正整数n(1<=n<=10^12),表示需要你判断的数字。
输出描述:
对于每组测试数据输出一行,“H”,“S”或“G”。表示整数种类。
输入例子1:
3
72
73
12
输出例子1:
H
S
G
分析:数字的情绪,被这道题弄的一点脾气都没有,算G的时候需要计算加上数字中0的个数。。。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int t = input.nextInt();
Long[] num = new Long[13];
while (t > 0) {
Long n = input.nextLong();
Long m = n;
List slist = new ArrayList();//统计S的个数
List glist = new ArrayList();//统计G的个数
int len = m.toString().length();//输入数字的长度
int cunt = 0;//非0的数字个数
int errcunt = 0;//0的个数
while (n > 0) {
if (n % 10 != 0) {
num[cunt++] = n % 10;
} else {
errcunt++;
}
n = n / 10;
}
for (int i = 0; i < cunt; i++) {
if (m % num[i] == 0) {
glist.add("G");
}
if (m % num[i] != 0) {
slist.add("S");
}
}
//算G的时候需要加上0的个数
if (errcunt + glist.size() == len) {
System.out.println("G");
} else if (slist.size() == len) {
System.out.println("S");
} else {
System.out.println("H");
}
t--;
}
}
}