OR164. 数字的情绪
描述
每个整数都希望可以整除很多数字,特别是它自身包含的数字,我们将整数分为三类:
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
输出:
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; }