林惜城


私信TA

用户名:reminder

访问量:31284

签 名:

等  级
排  名 91
经  验 9070
参赛次数 0
文章发表 95
年  龄 0
在职情况 学生
学  校 西安电子科技大学
专  业

  自我简介:

哈姆

TA的其他文章


解题思路:
(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 人评分

  评论区

  • «
  • »