LeetCode 507:完美数
原题链接: LeetCode 507:完美数
分析
怎么求出一个数的因子,从1 到 sqrt(n)开始枚举,因为如果 因子大于sqrt(n)的话另一个因子就会小于sqrt(n)。避免重复计算
每次遍历时将两个因子累加起来。
代码
bool checkPerfectNumber(int num)
{
if (num == 1)
return false;
int sum = 0;
for (int i = 1; i * i <= num; ++i)
{
if (num % i == 0)
{
sum += i;
if (i * i != num)
sum += num / i;
}
}
sum -= num;
return sum == num;
}
偷鸡法
看到评论区有的哥们欺负完美数少,直接用的打表计算
bool checkPerfectNumber(int num)
{
switch(num)
{
case 6:
case 28:
case 496:
case 8128:
case 33550336:
return true;
}
return false;
}
其实结果都差不多的
LeetCode 263:丑数|
链接: 263.丑数1
分析
用比较老实的方法,因为丑数因子都是2,3,5;
那我只要拿给出的数一直除以2,3,5,到最后如果结果为1,就说明是丑数。
代码
bool isUgly(int n)
{
if (n < 1)
return false;
while (n % 2 == 0)
{
n /= 2;
}
while (n % 3 == 0)
{
n /= 3;
}
while (n % 5 == 0)
{
n /= 5;
}
return n == 1;
}
运行结果:
感谢大家观看