解题思路:用尽量较少的循环,但从1到n是必须的,先根据每个数除以因数余数为零找出因数,然后再都加起来与外层循环的i做比较决定输出即可。
注意事项:存储因数的数组有效长度是变化的,注意长度num的初始化位置,避免影响后续数字的判断。
参考代码:
#include<bits/stdc++.h> using namespace std; int add(int* p,int nn) //计算所有因数的和 { int sum=0; for(int i=0;i<nn;i++) sum+=p[i]; return sum; } int main() { int n; cin>>n; int a[1001]; for(int i=1;i<n;i++) { int num=0; //int sum=0; for(int j=1;j<i;j++) //这个循环找出所有的因数 { if(i%j==0&&i!=j) { //sum+=j; a[num++]=j; } } if(add(a,num)==i) //判断当前的i是否为完数并输出 { cout<<i<<" its factors are"; for(int k=0;k<num;k++) cout<<" "<<a[k]; cout<<endl; } } return 0; }
0.0分
0 人评分
P1001 (C++代码)浏览:823 |
字符串的输入输出处理 (C语言代码)浏览:710 |
简单编码 (C++代码)(这里推荐用switch)浏览:999 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:559 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:575 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:981 |
Biggest Number (C++代码)回溯法浏览:1676 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:561 |
简单的a+b (C语言代码)浏览:564 |
剪刀石头布 (C语言代码)不知道怎么直接在scanf中用枚举变量浏览:1435 |