(новичок здесь)
Моя задача говорит, что я должен найти наименьшее число, цифры которого умножаются на данное число.Если такое число не может быть выполнено, выведите «-1»
Пример:
10 = 25 2*5=10
13 = -1
5 = 5
100 = 455 4*5*5 = 100
вход - одно число n;0 <= n <= 10 ^ 9 </p>
Мой код работает нормально, но всякий раз, когда я пытаюсь загрузить его на сайт конкурса, мой код не проходит все тестовые случаи.Все контрольные примеры скрыты, поэтому я не знаю, в каком конкретном тесте мой код дал сбой.
Поэтому я хотел бы попросить о помощи, я хочу знать, как мне найти этот конкретный контрольный пример или, что еще лучше, помочь мненайдите этот контрольный пример.
Мой код основан на коде с этих веб-сайтов:
https://www.geeksforgeeks.org/smallest-number-k-product-digits-k-equal-n/
https://www.geeksforgeeks.org/find-smallest-number-whose-digits-multiply-given-number-n/
Мой код:
#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;
}
Спасибо.