Матч 422, Мультичисло (MultiNumber)

Дивизион 2, Уровень 1

 

Число называется мультичислом, если его десятичное представление можно разбить на две части, произведение цифр которых одинаково. Например, число 1221 можно разбить на 12 и 21, произведение цифр которых равно: 1 * 2 = 2 * 1. Число можно разбивать только на две непустые группы последовательно стоящих цифр. Например, 12345 можно разбиться на 1-2345, 12-345, 123-45, 1234-5. Вернуть “YES”, если number является мультичислом или “NO” в противном случае.

 

Класс: MultiNumber

Метод: string check(int number)

Ограничения: 1 £ number £ 2,147,483,647.

 

Вход. Натурвальное число number.

 

Выход. “YES” или “NO” в зависимости от того, является ли number мультичислом.

 

Пример входа

number

1

1221

4729382

42393338

 

Пример выхода

“NO”

“YES”

“NO”

“YES”

 

 

РЕШЕНИЕ

перебор

 

Преобразуем число number в строку n. Будем разбивать число, записанное в строке n, на две части: от нулевой цифры до (i – 1) - ой и от i - ой до len - ой, где len – количество цифр в числе number. В переменной a подсчитываем произведение цифр первой части, а в b – второй. Если для какого-нибудь разбиения имеет место равенство a = b, то возвращаем “YES”, иначе “NO”.

 

ПРОГРАММА

 

#include <cstdio>

#include <string>

using namespace std;

 

char n[100];

 

class MultiNumber

{

public:

  string check(int number)

  {

    int i, j, a, b, len = sprintf(n,"%d",number);

    for(i = 1; i < len; i++)

    {

      a = b = 1;

      for(j = 0; j < i; j++) a *= n[j] - '0';

      for(j = i; j < len; j++) b *= n[j] - '0';

      if (a == b) return "YES";

    }

    return "NO";

  }

};