数字整除
模拟 / 数论
空间限制:16MB时间限制:1s总提交数:683通过率:25.77%题目来源: 站点添加
题目描述
Description
定理:把一个至少两位的正整数的个位数字去掉,再从余下的数中减去个位数的5倍。当且仅当差是17的倍数时,原数也是17的倍数 。
例如,34是17的倍数,因为3-20=-17是17的倍数;201不是17的倍数,因为20-5=15不是17的倍数。输入一个正整数n,你的任务是判断它是否是17的倍数。
输入描述
Input
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=10^100), 表示待判断的正整数。n=0表示输入结束,你的程序不应当处理这一行。
输出描述
Output
对于每组测试数据,输出一行,表示相应的n是否是17的倍数。1表示是,0表示否。
样本输入
Input example
34
201
2098765413
1717171717171717171717171717171717171717171717171718
0
样本输出
Output example
1
0
1
0
题目的编程来自于广东技术师范大学在线判题网站http://www.gpnuacm.com/#/home
第一种通过了,第二种没有通过
#include <stdio.h>
#include <string.h>
int main()
{ char num[520];
int sum,i,lengh;
while(scanf("%s",&num)&&strcmp(num,"0"))
{
sum=0;
lengh=strlen(num);
for(i=0;i<lengh;i++)
sum=(sum*10+num[i]-'0')%17;//n[i]是个字符如'5',字符也是ASCII码数zhi,'5'-'0'就是5了,
//字符串转化为数字的步骤
printf("%d\n",sum==0?1:0);
}
return 0;
}
#include <stdio.h>
int main()
{ long long int a,b,n,t;
while(scanf("%lld",&n))
{ if(n==0)
{
continue;
}
else{
a=n%10*5;
b=n/10;
t=b-a;
if(t%17==0)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
}
return 0;
}
本文介绍了一种用于判断大整数是否为17的倍数的有效算法,并提供了两种不同的实现方式。一种适用于非常大的整数,通过逐位处理减少计算复杂度;另一种则直接操作整数,适用于较小的数值范围。
826

被折叠的 条评论
为什么被折叠?



