// problem 4 int IsPerfect(int num) // precondition: 0 < num // postcondition: returns 1 if num is perfect, else returns 0 { int sum = 1; // sum of proper divisors int k; for(k=2; k <= num/2; k++) // 1 must be divisor, last is num/2 { if (num % k == 0){ sum += k; } } return (sum ==num); } // problem 5 (part A) String day; int period; AceCourse course(129244); // polysci 110 course.Meeting(day,period); cout << course.Instructor() << end; cout << "meets at " << day << " " << period << endl; // problem 5 (part B) void KnowledgeArea(String distrib) // postcondition: titles of all courses with area of knowledge = distrib // printed with a count of the number of such courses { int count = 0; AceCourse course(1); // dummy number here int num; for(num = 100000; num <= 160000; num++) { course.SetNumber(num); // alternatively: AceCourse course(num); if(course.IsValid() && couse.Area() == distrib) { count++; cout << course.Title() << endl; } } cout << "# of courses with " << distrib << " designation = " << count << endl; } // extra credit bool IsArmstrong(int num) // precondition: 0 < num // postcondition: returns true if num is an Armstrong number // otherwise returns false { int numDigits = NumDigits(num); int sum = 0; int k; for(k=0; k < numDigits; k++){ sum += int(Pow(num % 10, numDigits)); // last digit^numDigits num /= 10; // chop off last digit } return (sum == num); } int NumDigits(int num) // precondition: 0 < num // postcondition: returns # of digits in num { // return int(log10(num)) + 1; int count = 0; while (num != 0) { count++; num /= 10; } return count; }