您的位置:首页 > 编程语言 > C语言/C++

基于c++的完全数之非TDD版本(2013.8.20)

2013-08-20 23:22 501 查看
#include <cassert>
#include <cmath>

bool is_perfect(int num)
{
int sum = 0;
if (num > 1)
{
sum = 1;
for (int i = 2; i <= (int)sqrt((double)num); i++)
{
if (0 == (num % i))
{
sum += i;
sum += num / i;
}
}
}

return sum == num;
}

void test_is_perfect()
{
assert(is_perfect(6));
assert(is_perfect(28));
assert(is_perfect(496));
assert(is_perfect(8128));
}

const int perfects[] = {6, 28, 496, 8128};
const int size = sizeof(perfects) / sizeof(perfects[0]);

bool in_perfects(int num)
{
bool found = false;
int i = 0;

while(!found && i < size)
{
found = (num == perfects[i++]);
}

return found;
}

void test_is_not_perfect()
{
for (int i = 1; i < 100000; i++)
{
if (in_perfects(i))
{
assert(is_perfect(i));
}
else
{
assert(!is_perfect(i));
}
}
}

int main()
{
test_is_perfect();
test_is_not_perfect();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: