[CF550C] Divisibility by Eight

[CF550C] Divisibility by Eight

Description

给你一个位数不超过 100 的非负整数 N(不含前导 0)。你的任务是判断这个数字能否通过去掉其中的一些位上的数(当然不能去掉全部),使其成为一个能被 8 整除的正整数(不含前导 0)。特别注意:你不能重新排列数字的顺序。

Solution

一个数要被八整除,关键是最后三位

因此我们枚举最后三位是原数的哪三位,判断是否能被 8 整除即可

#include <bits/stdc++.h>
using namespace std;
#define int long long

signed main()
{
    ios::sync_with_stdio(false);
    string s;
    cin >> s;
    s = "0000" + s;
    for (int i = 0; i < s.length(); i++)
        s[i] -= '0';
    int n = s.length() - 1;
    for (int i = 2; i <= n; i++)
        for (int j = i + 1; j <= n; j++)
            for (int k = j + 1; k <= n; k++)
            {
                int t = s[i] * 100 + s[j] * 10 + s[k];
                if (t % 8 == 0)
                {
                    cout << "YES" << endl
                         << t;
                    return 0;
                }
            }
    cout << "NO";
}
原文地址:https://www.cnblogs.com/mollnn/p/14430118.html