[度小满][数字的情绪]每个整数都希望可以整除很多数字,特别是它自身包含的数字,我们将整数分为三类: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”,表示整数种类。
样例输入
3
72
73
12
样例输出
H
S
G
C++代码:
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
#define N 13
int main()
{
int T;
cin >> T;
if (1 <= T <= 100)
{
for (int i = 1; i <= T; i++)
{
int num1, num2, a[N], len;//定义整数
char ch[N];//字符数组,把整数转成字符串求整数长度
cin >> num1; //输入整数
if (num1 == 0)//单独处理边界0
{
cout << "G" << endl;
}
itoa(num1, ch, 10);//整数转换成字符串
len = strlen(ch);//求整数的长度
num2 = num1;
string G,S; //用于字符长度的比较
for (int i = len - 1; i >= 0; i--)//依次求出整数各位上的数,赋值给数组
{
a[i] = num1 % 10;
num1 /= 10;
//cout << a[i] << endl;
if (num2%a[i] == 0) //若整数可以被某位的数整除,则在G中添加G
{
G.append("G");
}
if (num2%a[i] != 0) //若整数不可以被某位的数整除,则在S中添加S
{
S.append("S");
}
}
//cout << G + "neirong" << endl;
//cout << S + "neirong" << endl;
//cout << G.size() << endl;
//cout << S.size() << endl;
//cout << len << endl;
if (G.size() == len) //若G的长度等于输入整数的长度,则表示全能整除为非常棒“G”
{
cout << "G" << endl;
}
else if (S.size() == len) //若S的长度等于输入整数的长度,则表示全不能整除为沮丧“S”
{
cout << "S" << endl;
}
else //若G或S的长度小于输入整数的长度,则表示部分可以整除为开心“H”
{
cout << "H" << endl;
}
}
}
}