题目
解决代码及点评完数的解决方案依旧是遍历,然后写出判断完数的函数进行处理
- <pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code">/************************************************************************/
- /*
- 16. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。
- 例如,6 的因子为1、2、3,而6=1+2+3,因此6 是“完数”。编程序找出1000之内的所有完数,
- 并按下面格式输出其因子:
- 6 its factors are 1,2,3
-
- */
- /************************************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code">// 判断一个数是否完数的函数
- bool f416(int num)
- { </pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"> int arr[100]={0};
- int index=0;
- int sum=0;</pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"> // 查找它的所有因子,再将因子累加
- for (int i=1;i<num;i++)
- {
- if (num%i==0)
- {
- sum+=i;
- arr[index++]=i;
- }
-
- }</pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"> // 如果因子累加的和是它自己本身,那么这个数是完数
- if (sum==num)
- {
- printf(" %5d its factors are",num);
- for (int i=0;i<index;i++)
- {
- printf("%5d",arr);
- }
- return true;
- }
- else
- {
- return false;
- }
- }</pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code">void main()
- {
- for (int i=1;i<=1000;i++) // 遍历1000个数
- {
- if (f416(i)) // 判断是不是完数
- {
- printf("\n");
- }
- }
-
- system("pause");
- }</pre><br></pre><br><br></pre>
|