解题思路:

定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。

例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。

冗长的定理和例子说明,想了想决定不去使用这个定理来判断一个数是否能被17整除,决定使用%符号来做。

对于特大数,使用字符串存储。这里有一个技巧,从字符串的第一位也就是整个数的最高位开始一位一位读取,没读取一位加到当前数中,然后对当前数进行%17,之后对当前数*10以便读取下一位组成新的数再%17。当我们将字符串读取并做完一系列操作后,我们发现如果此时的数中为0,那么就代表这个数是一个能被17整除的数。

参考代码:

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
	char s[1000];
	while((scanf("%s",s)))
	{
		if(s[0]=='0') break;
		else
		{
			int ans=0,len=0;
			len=strlen(s);
			for(int i=0;i<len;i++)
			{
				ans+=s[i]-'0';
				ans%=17;
				ans*=10;
			}
			if(ans==0) cout<<"1"<<endl;
			else cout<<"0"<<endl;
		}
	}
	return 0;
}


点赞(0)
 

0.0分

2 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论