i是j的倍数c语言编程,今天做oj碰到这道题,17的倍数,参考了一下网上的解题方法还是通不过,求指导...

/*定理:

把一个至少两位的正整数的个位数字去掉,

再从余下的数中减去个位数的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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值