原题链接:数字整除
解题思路:
定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复