数学 牛客小白月赛10

链接: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;
}

 

posted @ 2018-12-22 22:01  UUUUh  阅读(173)  评论(0编辑  收藏  举报