列表

详情


OR164. 数字的情绪

描述

每个整数都希望可以整除很多数字,特别是它自身包含的数字,我们将整数分为三类:

1. 数字可以整除它包含的一部分数字,比如72,由,72两种数字组成,72可以整除2,我们称这个数字是开心的,用”H”表示。

2. 数字不能整除它包含的任何数字,比如73,由,73两种数字组成,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

输出:

H
S
G

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2021-02-21

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(disable :4996)
int main()
{
	long long int a;
	scanf("%lld", &a);
	long long int *p;
	p = (long long int*)malloc(a*sizeof(long long int));
	for (int j = 0; j < a; j++)
	{
		scanf("%lld", &p[j]);
	}
	for (int k = 0; k < a; k++)
	{
		int flag = 0;
		int flag1 = 0;
		long long int r = p[k];
		while (r != 0)
		{
			flag++;
			long long int u = r % 10;
			if (u == 0)
			{
				flag1++;
			}
			else
			{
				if (p[k] % u == 0)
				{
					flag1++;
				}
				
			}
			r = r / 10;
		}
		if (flag == flag1)
		{
			printf("G\n");
		}
		if (flag1 == 0)
		{
			printf("S\n");
		}
		if ((flag1 != 0) && (flag != flag1))

		{
			printf("H\n");
		}

	}
}

C++14 解法, 执行用时: 2ms, 内存消耗: 368KB, 提交时间: 2019-12-06

#include<cstdio>
  
int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        long long num, cur;
        scanf("%lld", &num);
        int count = 0, len = 0;
        cur = num;
        while (cur) {
            long long temp = cur % 10;
            if (temp == 0) {
                ++count;
            } else if (num % temp == 0) {
                ++count;
            }
            cur /= 10;
            ++len;
        }
        if (count == len) {
            printf("G\n");
        } else if (count) {
            printf("H\n");
        } else {
            printf("S\n");
        }
    }
    return 0;
}

上一题