[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";
}