解题思路:
(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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论