博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
练习:求完数问题
阅读量:6905 次
发布时间:2019-06-27

本文共 1795 字,大约阅读时间需要 5 分钟。

题目:

一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:

  6     Its    factors     are   1     2     3

原帖:

下面是我的代码,思想不多说,贪心算法。

 

//#include 
#include
#include
#define DIVISERS_MAX_LENGTH (1024)#define TOP (10000)int main(void){ /* * 储存因子,成对的储存。例如6 * 1,6, 2,3 */ int divisers[DIVISERS_MAX_LENGTH] = {0}; int divisers_count = 0; /* 要判断的数 */ int number; int sum; /* 指定 i的最大值, */ int i_max; int i ; int diviser; for(number = 2; number < (TOP + 1) ; ++number ){ /* 所有数可以被 1 和 自己整除,所以,下面for 从 2 开始 sum = 1; count = 2; i = 2; i_max = number /2 */ divisers[0] = 1; divisers[1] = number; /* 关于 i < i_max . 因为整除啊, m = i / n 如果 i 能被 n 整除,则,n 最小,m最大。 随着循环进行 最小和最大不断被求出来,所以超过最大的就不用再算了。 其实,这个地方使用 i < sqrt(number) +1 最好了。 */ for (divisers_count = 2,i = 2,sum = 1,i_max = sqrt(number)+1; i < i_max; ++i){ if (!(number % i)){ if (!(divisers_count < DIVISERS_MAX_LENGTH)){ fprintf(stderr, "Too many divisers\n number:%d count:%d\n",number,divisers_count); break; } divisers[divisers_count] = i; diviser = number/i; sum += i; ++ divisers_count; if (diviser != i) { divisers[divisers_count] = diviser; sum += diviser; ++ divisers_count; } if (sum > number) break; } } /* 下面是输出 */ if (sum == number){ printf("%d ,Its factors are : ", number); for (i =0; i < divisers_count ; i += 2 ){ printf ("%d ",divisers[i]); } /* 这个因为是倒叙输出,数组可能不是偶数,所以要判断开始的位置 i的开始的位置应该是: i = (count -1 )- ( -((count-1) -(i-2)) +1 ) 化简后 i = 2*count -i -1; */ for (i = 2*divisers_count -i -1; i > 2; i-=2 ){ printf("%d ",divisers[i]); } printf("\n"); } } /* 结束了。。。*/ printf("end\n");}

 

 

 

转载于:https://www.cnblogs.com/playerc/p/3394450.html

你可能感兴趣的文章
知晓设计模式,框架,去提高开发效率,使代码简洁
查看>>
07-OpenLDAP密码审计
查看>>
使用Flex 和 Red5开发简单视频直播功能
查看>>
233
查看>>
第二十一章 任务、线程和同步
查看>>
HtmlDecode 解码 &nbsp;
查看>>
文件共享windows server 2008 服务器
查看>>
软考:两个通用思想
查看>>
初入koa2 -起步
查看>>
java 开发体系参考学习
查看>>
【转】如何阅读android源码
查看>>
Azure系列2.1.4 —— BlobInputStream
查看>>
关于面向对象的理解和类、对象,Java的三大特性
查看>>
1004 成绩排名
查看>>
【转载】【springmvc+mybatis项目实战】杰信商贸-1.项目背景
查看>>
(转)GMap.Net开发之自定义Marker使用方法
查看>>
P1501 [国家集训队]Tree II
查看>>
用ReactNative搭建一个安卓APP
查看>>
rocketmq生产者代码分析
查看>>
[扫雷][游戏] 交互*2
查看>>