巧妙的数(逐倍数判断)


cin>>s;    若s串=1236

lens=s.size(),pd=1,ys=0,p[10]={}

0<=i< l

开始运算:

P[1]=p[2]=p[3]=p[6]=true; //下标做标记

若 p[6]=ture,则p[2]=p[3]=ture,p[6]=false

pd=1     9>=k>1

若pd%k!=0&&p[k]=ture时,则pd*=k;

1%9!=0&&p[9]    不成立

……

1%4!=0&&p[4]    不成立

1%3!=0&&p[3]    成立

进入分支   pd*=3      此时 pd=3

3%2!=0&&p[2]    成立

进入分支   pd*=2      此时 pd=6

随后进行分段计算——

10*0+1=1    1%pd==1

10*1+2=12   12%pd==0

10*0+3=3    3%pd==3

10*3+6=36   36%pd==0

最后判断pd是否为0

为0输出clever

否则退出not clever


#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	string s;
	cin>>s;
	int l=s.size(),pd=1,ys=0;
	bool p[10]={};
	for(int i=0;i<l;i++)
		p[s[i]-'0']=true;
	if(p[6])p[2]=p[3]=true,p[6]=false;
	for(int i=9;i>1;i--)
		if(pd%i!=0&&p[i])pd*=i;
	for(int i=0;i<l;i++){
		ys=ys*10+s[i]-'0',ys%=pd;
	}if(ys==0)cout<<"clever";
	else cout<<"not clever";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值