基于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();}