/* 题目描述: 7是一个恶魔数字,如果一个数是7的倍数, 或者它的数位上含有数字7,那么这个数也是恶魔数字 输入: 多组测试数据,每组只有一行, 一行只有一个整数n(1<=n<=1e(1e5)), 最后输入一个0来表示结束 输出: 判断这个数是不是恶魔数字,是的话输出yes,否则输出no 样例输入: 7 17 14 70 94 0 样例输出: yes yes yes yes no 难度:very easy */ #include <cstdio> int main() { const char* YES = "yes/n"; const char* NO = "no/n"; const int SIZE = 100001; // 1e(1e5) char number[SIZE]; // 因为题目要求的数字范围很大(10万位数), 所以使用字符数组存储, 再进行分析 bool isDevilNum; // 标记是否为恶魔数字 int remainder; // 竖式中的余数 int i; // 循环用变量 while( scanf("%s", number) != EOF ) { // 输入0退出 if( number[0] == '0' && number[1] == 0 ) break; // 扫描字符串, 作竖式运算 for( i = 0, remainder = 0; number[i] != 0; i++ ) { // 如果当前位为7, 即为恶魔数字, 标记后退出 if( number[i] == '7' ) { remainder = 0; break; } // 否则继续竖式运算, 记录余数 remainder = (remainder * 10 + number[i] - '0') % 7; } // 如果 包含7 或 最后余数为0( 即可以被7整除 ), 即为恶魔数字 isDevilNum = (remainder == 0); // 输出结果 if( isDevilNum ) printf(YES); else printf(NO); } return 0; }