#include<bits/stdc++.h>
using namespace std;
char number(long long n)
{
  //判断有没有可以整除或者不能整除的数
    int f=0;
    int t=0;
    long long o=n;//存下原数
    while(n)
    {
        long long x=n%10;
        if(x!=0)
        {
            if(o%x==0) t=1;
            else f=1;
        }
        else t=1;
        if(t&&f) break;//优化时间复杂度,发现等于H直接返回
        n/=10;
    }
    if(!t) 
    return 'S';
    else if(!f) 
    return 'G';
    else return 'H';//这里如果不把return H放在这里会报错
}
int main()
{
    int q;
    cin>>q;
    while(q--)
    {
        long long n;
        cin>>n;
        cout<<number(n)<<'\n';
    }
    return 0;
}

考察数字的处理,提取每一位数字就是取余然后n/=10;

要注意数据的大小,我刚开始用int直接爆了。

好好读题,我刚开始没发现还有特判,在这看半天还以为数据出错了。