题目:
小红定义一个数为“完美数”,当且仅当该数仅有一个非零数字。例如 5000, 4, 1, 10, 200都是完美数。
小红拿到了一个大小为n的数组,她希望选择两个元素,满足它们的乘积为完美数。
小红想知道,共有多少种不同的取法?
数据范围:
1 ≤ n ≤ 2000
1 ≤ ai ≤ 10^9
思路:
按照题目要求直接破解,两层循环遍历,一一找出符合完美数的组合个数
判断是否完美数:完美数只有最高位非0,所以当num/10不等于0时,(也就是num不为个位数时),当前的数mod10,如果不为0则不是完美数
代码:
class Solution {
private:
// 判断是否是完美数:只有最高位不是0
bool isPerfect(long long num){
while(num / 10){
if(num % 10 != 0){ // 最后一位不为0
return false;
}else{ // 最后一位为0
num /= 10;
}
}
return true;
}
public:
int perfectPair(vector<int>& arr) {
int n = arr.size();
int count = 0;
for(int i = 0; i < n; i++){
for(int j = i + 1; j < n; j++){
if(isPerfect(arr[i] * arr[j])) count++;
}
}
return count;
}
};