解题思路:
(1)一开始的思路是写一个大整数类,重载 '-' 和 '/' 运算符,然后按照题目来。但这属于大炮打蚊子了。
(2)然后看了优质题解发现,题目给的判断原理似乎并没有什么用,因为这题的难点就在于输入数据存在大数,只能用字符串表示,如果我能解决大数这个问题,我直接除17看余数不是一样吗?去掉个位数再减去它的倍数既不能节省时间也不能节省空间。
(3)原理看代码注释吧,在这里感谢优质题解,传送面板:https://blog.dotcpp.com/a/83889
注意事项:
(1)只要能理解 for 循环的原理,这题其实没啥算法可言。
(2)感觉 BigInt 类有空还是得写一写,挺考验 OOP 编程理解的。
参考代码:
// 题目 1074: 数字整除 #include <iostream> #include <cstring> using namespace std; int main() { string str; // 存储大数 while (1) { cin >> str; if (str[0] == '0') { break; // 结束输入 } int num = 0; // 原理就是从最高位开始计数,一旦找到17的倍数就归零,从下一位重新开始计数 // 比如某个数17565651561(随便写的),前两位是17,那么这个数除17的余数和去掉前两位后剩下的数除17的余数是相等的 for (int i = 0; str[i] != '\0'; ++i) { num = num * 10 + str[i] - '0'; num %= 17; // 一个数减去一个17的倍数,得到的差与17的余数仍和原数与17的余数一样 } if (!num) { cout << 1 << endl; } else { cout << 0 << endl; } } return 0; }
0.0分
1 人评分
矩形面积交 (Java代码)浏览:1281 |
C语言训练-数字母 (C语言代码)浏览:670 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:350 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:590 |
C二级辅导-分段函数 (C语言代码)浏览:659 |
1197求助浏览:667 |
C语言程序设计教程(第三版)课后习题10.1 (C++代码)浏览:529 |
小O的数字 (C++代码)浏览:806 |
逆反的01串 (C语言代码)浏览:1527 |
整数分类 oj上总是wrong answer浏览:687 |