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