原题链接:数字整除
解题思路:
(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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复