Given a positive integer a
, find the smallest positive integer b
whose multiplication of each digit equals to a
.
If there is no answer or the answer is not fit in 32-bit signed integer, then return 0.
Example 1
Input:
48
Output:
68
Example 2
Input:
15
Output:
35
想法:分解时从较大的因子9-2,不断分解,直至等于1或者不可分。
class Solution {
public:
vector<int> as;
int smallestFactorization(int a) {
if(a<10) return a;
bool r=factor(a);
if(r==false || as.size()>32)
return 0;
long ans=0;
for(int i=0;i<as.size();i++){
ans+=(long)pow(10,i)*as[i];
}
return ans>INT_MAX?0:ans;
}
bool factor(int a){
while(a>1){
int i;
for(i=9;i>1;i--){
if(a%i==0){
a=a/i;
as.push_back(i);
break;
}
}
if(i==1){
return false;
}
}
return true;;
}
};