मान लीजिए हमारे पास एक धनात्मक पूर्णांक x है, हमें सबसे छोटा धनात्मक पूर्णांक b ढूंढना है जिसके प्रत्येक अंक का गुणनफल x के बराबर हो। यदि ऐसा कोई उत्तर नहीं है तो 0 लौटाएं।
उदाहरण के लिए, यदि इनपुट 48 है, तो आउटपुट 68 होगा।
हल करने की विधि
हम 9 से 2 तक के अंकों से गुणनखंड करने का प्रयास करेंगे:
- ret = 0, mul = 1।
- यदि a < 2, तो a लौटाएं।
- i = 9 से 2 तक घटते क्रम में:
- जब तक a % i == 0:
- ret = i * mul + ret
- mul *= 10
- a /= i
- यदि a < 2 और ret < INT_MAX, तो ret लौटाएं, अन्यथा 0।
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
#include <bits/stdc++.h> using namespace std; typedef long long int lli; class Solution { public: int smallestFactorization(int a) { lli ret = 0; lli mul = 1; if (a < 2) return a; for (lli i = 9; i >= 2; i--) { while (a % i == 0) { ret = i * mul + ret; mul *= 10; a /= i; } } return a < 2 && ret < INT_MAX ? ret : 0; } }; main(){ Solution ob; cout << (ob.smallestFactorization(48)); }
इनपुट
48
आउटपुट
68