C/C++

Задача по информатике, C++, помогите

Рассматривается множество целых чисел, принадлежащих числовому отрезку [3212; 64212], которые удовлетворяют следующим условиям:
а) Сумма цифр равна 5.
б) Произведение цифр равно нулю.
Найдите количество таких чисел и максимальное из них. В ответе запишите через пробел сначала количество, а затем максимальное число.
 #include 
constexpr int a = 3212, b = 64212;

int main()
{
int count{}, max_n{}, tmp;
bool chk;
for (int i = 0; i < 6; i++) //x0000
{
for (int j = 0; j < 6 - i; j++) //xx000
{
for (int k = 0; k < 6 - i - j; k++) //xxx00
{
for (int l = 0; l < 6 - i - j - k; l++) //xxxx0
{
for (int z = 0; z < 6 - i - j - k- l; z++) //xxxxx
{
chk = !(i && j && k && l && z) && (i+j+k+l+z==5);
if (chk)
{
tmp = i * 10000 + j * 1000 + k * 100 + l * 10 + z;
if (tmp >= a && tmp
СК
Сергей Красницкий
51 416
Лучший ответ
 #include  
#include
#include
using namespace std;
int sum_digits(int x) {
static const auto ten = 10;
auto sum = 0;
do sum += x % ten; while (x /= ten);
return sum;
}
int multiply_digits(int x) {
static const auto ten = 10;
auto mult = 1;
do {
mult *= x % ten;
if (!mult) break;
} while (x /= ten);
return mult;
}
bool equals(const int a, const int b) {
return a == b;
}
int main() {
const auto sm = 5;
const auto ml = 0;
const auto a = 3212;
const auto b = 64212;
auto max = numeric_limits::min();
auto count = 0;
for (auto x = a; x
Dання Шк
Dання Шк
92 710
Роман Гейдаров 0.230 ms против 0.001 ms у моего 5-ти мерного цикла ) Что скажите в свою защиту?
#include <iostream>
int main() { int i, j, k = 0, l, m, s, p;
for (i = 3212; i < 64213; i++) { j = i; s = 0;
p = 1; while (j) { l = j % 10; s += l; p *= l; j /= 10; }
if (s == 5 && p == 0) { k++; m = i; } }
std::cout << k << ' ' << m; }

Ответ:
Anton 54Rus
Anton 54Rus
66 572
Роман Гейдаров Компактность это конечно хорошо, но работает в 250 раз медленнее.