/*定理:
把一个至少两位的正整数的个位数字去掉,
再从余下的数中减去个位数的5倍。
当且仅当差是17的倍数时,原数也是17的倍数 。
例如,
34是17的倍数,因为3-20=-17是17的倍数;
201不是17的倍数,因为20-5=15不是17的倍数。
输入一个正整数n,你的任务是判断它是否是17的倍数。
输入
输入文件最多包含10组测试数据,
每个数据占一行,仅包含一个正整数n(1<=n<=10^100),
表示待判断的正整数。
n=0表示输入结束,你的程序不应当处理这一行。
输出
对于每组测试数据,输出一行,表示相应的n是否是17的倍数。1表示是,0表示否。
样例输入
34
201
2098765413
1717171717171717171717171717171717171717171717171718
0
样例输出
1
0
1
0
我的分析:
34= 1
3-4*5=-17 1
201= 0
20-5=15 0
1-25=-24 0
2098765413= 1
209876541-15=209876526 1
20987652-30=20987622 1
2098762-10=2098752 1
209875-10=209865 1
20986-25=20961 1
2096-5=2091 1
209-5=204 1
20-20=0 1*/
#include
#include
#include
using namespace std;
int shiqi(char a[])
{
int n,m,x,t,mop,p;
n=strlen(a);
if(n>2) //长度大于1 就是2位数以上
{
n=n-1;
//我提取 最小的一位数字 并把他乘5
m=a[n]-'0';
m=m*5;
//我也要适当 提取 后面的数字 p=1;
x=0;
t=1; //这个用于记录我提取了几位
while(fabs(x)<=fabs(m))
{
x=x+p*(a[n-t]-'0');
p=p*10;
if(n-t==0) break;
t++;
}
t--;
//现在好了 我算下 后t位的 相剪的数字 x=x-m; //x是最后的几位(t位)//一共提取了t位//x=123 t=3 我要提取 1 x/100=1 x=x%100 =23//x=23 t=2 我要提取 2 x/10 =2 x=x%10 =3//x=3 t=1 我要提取 3 x/1//x int xx;
if(n==2) t++;
mop=pow(10,t-1);
for(xx=n-t;t>0;t--,xx++)
{
if(mop==0) mop=1;
a[xx]=x/mop+'0';
x=x%mop;
mop=mop/10;
}
a[n]=0;
return shiqi(a);
}
else
{
x=0;
x=(a[0]-'0')*10+(a[1]-'0');
return x;
}
}
int main(){
char a[10][110]={0};
int i,j;
for(i=0;i<10;i++)
{
gets(a[i]);
if(strcmp(a[i],"0")==0) break;
}
for(j=0;j
{
if(shiqi(a[j])%17==0) cout<<1<
else cout<<0<
}
return 0;
}