Codeforces Round #306 (Div. 2), problem: (C) Divisibility by Eight 【数学结论题+判断尾数三位是8的倍数】

在这里插入图片描述
Codeforces Round #306 (Div. 2), problem: © Divisibility by Eight


题目大意

给你一个数字,你可以删除其中一些数字,然后问是否可以使得这个数字是8的倍数


题解

这道题给跪了Orz

▄█▀█●

数学大佬就秒懂。。。 数学结论题,只要有尾部有三位数是8的倍数,那么这个数就能被8整除。这结论一般想不到,只有大佬才想得到。又因为是随意输出一个,所以只要枚举一位数,两位数,三位数能被8整除输出答案即可

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=1e2+10;
char s[maxn];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>s+1;
    int n=strlen(s+1);
    int x=0;
    //1位
    for(int i=1;i<=n;i++){
        x=s[i]-'0';
        if(x%8==0){
            cout<<"YES"<<endl;
            cout<<x<<endl;
            return 0;
        }
    }
    //2位
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            x=(s[i]-'0')*10+s[j]-'0';
            if(x%8==0){
                cout<<"YES"<<endl;
                cout<<x<<endl;
                return 0;
            }
        }
    }
    //3位
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            for(int k=j+1;k<=n;k++){
                x=(s[i]-'0')*100+(s[j]-'0')*10+s[k]-'0';
                if(x%8==0){
                    cout<<"YES"<<endl;
                    cout<<x<<endl;
                    return 0;
                }
            }
        }
    }
    cout<<"NO"<<endl;
    return 0;
}
学如逆水行舟,不进则退
一百个Chocolate CSDN认证博客专家 CSDN博客专家 博客之星 前端开发攻城狮
JS,TS,LeetCode,Vue,React,算法爱好者。
主要分享前端知识,立志成为优秀前端博主。
座右铭:学如逆水行舟,不进则退!
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值