c:求1-1000 以内的所有完数
来源:互联网 发布:c语言memset头文件 编辑:程序博客网 时间:2024/05/18 02:07
一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。
现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000)
,输出[n,m]范围内所有的完数。
提示:可以写一个函数来判断某个数是否是完数。
输出格式:
其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。
#include <stdio.h>#include <stdlib.h>#include <string.h>/*一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数。提示:可以写一个函数来判断某个数是否是完数。输出格式:其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。*/int isPerfectNumber(int num);int getAllPerfectNumber(int n,int m,int* list);void showPerfectNumbers(int size,int* list);char* itoa(int num,char*str,int radix);int main(int argc, char const *argv[]){ int n = 2,m = 999; // printf("%s\n", "请输入一个区间的两个端点(1<=n<m<1000):"); // scanf("%d %d",&n,&m); if(n>=1 && m>n && m<1000){ int* set = (int*)malloc((m-n)*2*sizeof(char*)); int size = getAllPerfectNumber(n,m,set); printf("size = %d\n", size); showPerfectNumbers(size,set); free(set); }else{ printf("%s %d %d\n","输入的参数不合法:",n,m); } return 0;}int isPerfectNumber(int num){ int temp = 0; for (int i = 1; i < num; ++i) { if(num % i ==0){ temp +=i; } } return temp == num;}int getAllPerfectNumber(int n,int m,int* list){ // 1<=n<m<1000 int ret = 0; if(n<1 || m<=n){ goto end; } for (int i = n; i <= m; ++i) { if(isPerfectNumber(i)){ ret++; *list++ = i; printf("i = %d\n", i); } }end: return ret;}void showPerfectNumbers(int size,int* list){ if(size){ char* output = (char*)malloc(size* 2* sizeof(char*)); *output='\0'; // 初始化为一个空字符串 "" for (int i = 0; i < size; ++i) { char t[5]; itoa(list[i],t,10); strcat(output,t); if(i!=size-1){ strcat(output," "); }else{ strcat(output,"<"); } } printf("%s\n", output); free(output); }else{ printf(" \n"); }}/*将一个数字转成字符串[来自itoa的百度百科](http://baike.baidu.com/link?url=wiDpiMwWphP2-bXpZCCIo-k_MAXqVa6TlRrn-fgFFZfAypFCvYgpi3KTrEtJfI6yL6wK5nBUTilHn2WOpelje_)*/char* itoa(int num,char*str,int radix){ /*索引表*/ char index[]="0123456789ABCDEF"; unsigned unum;/*中间变量*/ int i=0,j,k; /*确定unum的值*/ if(radix==10&&num<0) { /*十进制负数*/ unum=(unsigned)-num; str[i++]='-'; } else unum=(unsigned)num; /*其他情况*/ /*转换*/ do { str[i++]=index[unum%(unsigned)radix]; unum/=radix; } while(unum); str[i]='\0'; /*逆序*/ if(str[0]=='-'){ k=1;/*十进制负数*/ } else{ k=0; } char temp; for(j=k; j<=(i-1)/2; j++) { temp=str[j]; str[j]=str[i-1+k-j]; str[i-1+k-j]=temp; } return str;}
输出如下:
6 28 496[Finished in 1.9s]
- 所以1-1000以内的所有完数为:
6,28,496
.
sublime 只适合装逼,不适合写代码…
0 0
- c:求1-1000 以内的所有完数
- C—求1000以内所有的完数
- 求1000以内的所有完数
- 求1000以内所有的"完数"
- 求n以内的所有完数
- 求N以内的所有完数
- 求1000以内的所有“完全数”。
- 求1000以内的所有水仙花数
- 求1000以内所有完数
- 小应用程序求1000以内的所有完数
- C语言求1000以内完数
- 完数:求1000以内所有完数
- 【程序13】求10000以内的所有完数
- LabView求10000以内的所有完数
- 第三章 求100以内的所有完数
- 第三章 求100以内的所有完数
- 求N以内的所有亲和数
- 求n以内的所有因子数
- mongoc_client_command_simple
- PowerDesigner连接oracle数据库 以及连接数据库时出现的问题
- 随记
- poj 3660
- nbut 1674
- c:求1-1000 以内的所有完数
- 算法提高 最长单词&&单词个数统计&&不同单词个数统计
- 蓝桥杯-8-1因式分解(java)
- servlet的四大作用域对象和jsp的九大内置对象及其四大作用域对象
- 2017年50道Java线程面试题
- 四、简单刷题APP(题库是Excel)之单选和多选的跳转
- 三子棋
- Poj 2778 [AC自动机,矩阵乘法]
- Java的日期与时间(十二)java.time.LocalDate