#include <iostream>
#include <cassert>
#include <cmath>
using namespace std;
bool is_perfect(int num)
{
int sum = 0;
sum = 1;
for (int i = 2; i <= (int)sqrt((double)num); i++)
{
if (num % i == 0)
{
sum += i;
sum += num/i;
}
}
return sum == num;
}
static const int PERFECT_NUMS[] = {6, 28, 496, 8128, 33550336};
bool find_num_in(int num, const int *perfects, int size)
{
bool found = false;
int i = 0;
while (!found && i < size)
{
if (perfects[i++] == num)
{
found = true;
}
}
return found;
}
void test_perfect()
{
for (int i = 0; i < sizeof(PERFECT_NUMS) / sizeof(int); i++)
{
assert(is_perfect(PERFECT_NUMS[i]));
}
}
void test_non_perfect()
{
int size = sizeof(PERFECT_NUMS) / sizeof(int);
for (int i = 2; i < 10000; i++)
{
if (find_num_in(i, PERFECT_NUMS, size))
{
assert(is_perfect(i));
}
else
{
assert(!is_perfect(i));
}
}
assert(is_perfect(PERFECT_NUMS[4]));
}
int main()
{
test_perfect();
test_non_perfect();
}
基于c++的完全数之非TDD版本
最新推荐文章于 2022-08-18 21:50:17 发布