链接:https://ac.nowcoder.com/acm/contest/280/B
来源:牛客网
题解:暴力,倍数特征请转https://blog.csdn.net/slx_391987/article/details/39076153
题目描述
某年某月某天的数学课上,Actci正在遨游宇宙呢,对于他的屡教不改,她的数学老师决定难为一下Actci,将他叫醒。
“咳咳,我现在给出一个数a(0≤a≤1010000),判断a是否是3,5,8,11中某些数的的倍数,你只有一秒钟的时间,答不上来的话,呵,%#W$%@#$@...”。
作为他后桌的你怎么能看着Actci“受害”呢,于是你决定帮帮他。
输入描述:
一行,一个数 a。
输出描述:
两行。 第一行输出 Yes 或 No,表示这个数是否是这四个数中一个或几个数的倍数。 第二行,a是哪些数的倍数,每个数用空格隔开(顺序从小到大),若第一行为 No 则不用输出。
示例1
输入
123456789
输出
Yes 3
示例2
输入
2341232402462055420
输出
Yes 3 5
示例3
输入
9741427
输出
No
#include <bits/stdc++.h>
using namespace std;
#define int long long
int flag1,flag2,flag3,flag4,n,m;
string s;
signed main(){
cin>>s;
flag1=0;
int len=s.size();
int ans=0;
for(int i=0;i<len;i++){
if((s[i]-'0')%3!=0){
ans+=s[i]-'0';
}
}
if(ans%3==0) {
flag1=1;
}
flag2=0;
if(s[len-1]=='0'||s[len-1]=='5'){
flag2 = 1;
}
int a=0;
flag3 = 0;
a=(s[len-1]-'0')+(s[len-2]-'0')*10+(s[len-3]-'0')*100;
if(a%8==0) {
flag3 = 1;
}
flag4 = 0;
int ji = 0,ou = 0;
for(int i=0;i<len;i++){
if((i+1)%2) ji+=s[i]-'0';
else ou+=s[i]-'0';
}
if(abs(ji-ou)%11==0) flag4 = 1;
if(flag1||flag2||flag3||flag4){
puts("Yes");
if(flag1) printf("3 ");
if(flag2) printf("5 ");
if(flag3) printf("8 ");
if(flag4) printf("11 ");
}
else puts("No");
return 0;
}