cc王


私信TA

用户名:uq_86486662518

访问量:2072

签 名:

吉利给给给!

等  级
排  名 855
经  验 3496
参赛次数 10
文章发表 6
年  龄 20
在职情况 学生
学  校 盐城师范学院
专  业 数字媒体技术

  自我简介:

TA的其他文章

解题思路:

定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的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分

4 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区