只有通过了55% ,求解
#include<iostream>
#include<string>
#include<vector>
#include<stdio.h>
#include<string.h>
#include<map>
#include<algorithm>
#include<queue>
#include<fstream>
using namespace std;
int n;
string num;
int nums[20];
int vis[11];
int BigNumMod(int BigNum[], int c, int length) {
int ans = 0;
for (int i = 0; i < length; i++)
ans = ((ans * 10) + BigNum[i]) % c;
return ans;
}
int main() {
scanf("%d", &n);
int len, cnt, c;
while (n--) {
cin >> num;
cnt = 0;
len = num.length();
memset(vis, -1, sizeof(vis));
vis[0] = 1;
for (int i = 0; i < len; i++)nums[i] = num[i] - '0';
for (int i = 0; i < len; i++) {
c = num[i] - '0';
if (vis[c] == 1)cnt++;
else if (vis[c] == -1 && BigNumMod(nums, c, len) == 0) {
vis[c] = 1;
cnt++;
}
else {
vis[c] = 0;
}
}
printf("%s", len == cnt ? "G" : cnt == 0 ? "S" : "H");
if (n != 0)printf("\n");
}
return 0;
}