考察点:简单的运算问题。
思路:从9到2遍历,思路简单,但需要注意的细节很多,首先应该用long long接受ret,如果是超出范围的的则return 0;然后a为1的情况下应该退出循环;循环外a不为1的情况下return 0;
C++代码:
class Solution {
public:
int num[10] = {2,3,4,5,6,7,8,9};
long long pow(long long a, int n) {
long long ret = 1;
for (int i=0; i<n; i++)
ret *= a;
return ret;
}
int smallestFactorization(int a) {
if (a == 1)
return 1;
int time = 0;
long long ret = 0;
//int index = 7;
for (int i=7; i>=0; i--) {
while(a % num[i] == 0) {
a /= num[i];
time++;
ret += pow(10,time-1) * num[i];
if (ret > INT_MAX)
return 0;
cout<<num[i]<<" "<<a<<endl;
}
if (a == 1)
break;
}
if (a == 1)
return ret;
else
return 0;
}
};