Member 13834999 Ответов: 1

Найдите наименьшее число, цифры которого умножаются на заданное число


(новичок здесь)

Моя задача состоит в том, чтобы найти наименьшее число, цифры которого умножаются на заданное число. Если такое число не может быть сделано, выведите "-1"

Пример:

10 = 25       2*5=10<br />
13 = -1  <br />
5 = 5     <br />
100 = 455     4*5*5 = 100

входное значение-это одно число n;
0 <= n <= 10^9


Мой код, кажется, работает нормально, но всякий раз, когда я пытаюсь загрузить его на сайт конкурса, мой код не проходит все тестовые случаи. Все тестовые случаи скрыты, поэтому я не знаю конкретного тестового случая, когда мой код терпит неудачу.

Поэтому я хотел попросить о помощи, я хочу знать, как я могу найти этот конкретный тестовый случай или даже лучше помочь мне найти этот тестовый случай.

Мой код основан на коде с этих сайтов:

Наименьшее число k такое, что произведение цифр k равно n - GeeksforGeeks[^]

Найдите наименьшее число, цифры которого умножаются на заданное число n - GeeksforGeeks[^]

Мой код:

#include <iostream>
#include <stack>
using namespace std;

    // function to find smallest number k such that
    // the product of digits of k is equal to n
    long long int smallestNumber(long long int n)
    {
        // if 'n' is a single digit number, then
        // it is the required number
        if (n >= 0 && n <= 9)
            return n;

        // stack the store the the digits
        stack<long long int> digits;

        // repeatedly divide 'n' by the numbers 
        // from 9 to 2 until all the numbers are 
        // used or 'n' > 1
        for (long long int i = 9; i >= 2 && n > 1; i--)
        {
            while (n % i == 0)
            {
                // save the digit 'i' that divides 'n'
                // onto the stack
                digits.push(i);
                n = n / i;
            }
        }

        // if true, then no number 'k' can be formed 
        if (n != 1)
            return -1;

        // pop digits from the stack 'digits'
        // and add them to 'k'
        long long int k = 0;
        while (!digits.empty())
        {
            k = k * 10 + digits.top();
            digits.pop();
        }

        // required smallest number
        return k;
    }

    // Driver program to test above
    int main()
    {
        long long int n;//number i want to convert
        cin >> n;
        cout << smallestNumber(n);
        return 0;
    }

Спасибо.

Что я уже пробовал:

Я пробовал числа от 1 до 1000000 и все они, кажется, работают нормально

Rick York

Обратите внимание, что два требования, на которые вы ссылаетесь, также отличаются друг от друга. В одном из них допускается один раз простое число. В других это не так. Я видел эту проблему опубликованной много, много раз, и я видел только один случай, когда один раз простое число разрешено.

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Мой код, кажется, работает нормально, но всякий раз, когда я пытаюсь загрузить его на сайт конкурса, мой код не проходит все тестовые случаи.

Потому что ваш код неверен !
Для n=12 ваш ответ будет 223, когда лучший ответ-26.

Где вы пытаетесь загрузить свой код ?
Цитата:
Поэтому я хотел попросить о помощи, я хочу знать, как я могу найти этот конкретный тестовый случай или даже лучше помочь мне найти этот тестовый случай.

Короткий ответ: нет.
Тестовые случаи специально держатся в секрете.
Это позволяет избежать представления программ, которые просто содержат список ответов для конкретных тестовых случаев, и никакого реального алгоритма, решающего проблему.


Member 13834999

Какой компилятор вы используете ? Потому что если я введу n=12, то получу 26 (visual studio 2017)

Patrice T

ой как я виноват :)
Я слишком быстро прочитал твой код.

Member 13834999

Я загружаю данные в систему частного университета

Patrice T

Вам нужно перечислить точное требование, если вы хотите, чтобы мы нашли, что не так в вашем коде.

Member 13834999

единственное требование к этому-0 <= n <= 10^9 и все, что я сказал, больше ничего

Patrice T

То точная формулировка от требование это необходимо, чтобы найти, какую деталь вы сделали неправильно.