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

来源:互联网 发布:淘宝小二收入 编辑:程序博客网 时间:2024/06/08 08:25
#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();}