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

来源:互联网 发布:安河桥 知乎 编辑:程序博客网 时间:2024/05/20 20:05
#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;}


 

原创粉丝点击