7-45 找完数(20 分)
2018-12-04 07:11:58来源:博客园 阅读 ()
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。
输入样例:
2 30
输出样例:
6 = 1 + 2 + 3 28 = 1 + 2 + 4 + 7 + 14
1 #include <stdio.h> 2 3 int isPerfect(int num); 4 void output(int num); 5 6 int main(int argc, char const *argv[]) 7 { 8 int m, n; 9 int i; 10 int count = 0; 11 12 scanf("%d %d", &m, &n); 13 14 for ( i = m; i <= n; i++ ) { 15 int num = i; 16 if ( isPerfect( num ) ) { 17 count++; 18 output(num); 19 } 20 } 21 if ( count == 0 ) { 22 printf("None\n"); 23 } 24 return 0; 25 } 26 27 int isPerfect(int num) 28 { 29 int nSum = 0; 30 int ret = 0; 31 for ( int i = 1; i < num; i++ ) { 32 if ( num % i == 0 ) { 33 nSum += i; 34 } 35 // 判断一个数是不是完数 要把它所有的因子都加起来 36 if ( nSum == num && i + 1 == num) { 37 ret = 1; 38 } 39 } 40 return ret; 41 } 42 43 void output(int num) 44 { 45 int nSum = 0; 46 printf("%d = ", num); 47 for ( int i = 1; i < num; i++ ) { 48 if ( num % i == 0 ) { 49 nSum += i; 50 printf("%d", i); 51 if ( nSum == num ) { 52 break; 53 } else { 54 printf(" + "); 55 } 56 } 57 } 58 printf("\n"); 59 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 从“最简真分数的个数”谈起 2019-09-17
- 【模板】C++高精度加法 2019-08-16
- 递归(四):组合 2019-08-16
- 第一章:程序设计和C语言 2018-12-04
- .Net中会存在内存泄漏吗 2018-06-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash