c#一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.找出1000以内的所有完数

 我来答
JoyDaddy
2014-02-06
知道答主
回答量:15
采纳率:0%
帮助的人:6.6万
展开全部
遍历确实是最简单的方法了,根据条件求完数,代码如下(根据所求数的递增,运算速度会变的非常慢): /// <summary>
/// 获取自然数以内的完数
/// </summary>
/// <param name="number">例如 1000 内</param>
/// <returns>所有完数</returns>
protected string GetPerfectNumber(int number)
{
string returnStr = "";
int i, j, k, h, s, sum;
int[] a = new int[number]; // 存储因数
sum = 0;
// 遍历 1000 内数据
for (i = 2; i <= number; i++)
{
s = 0;
k = 0;
for (j = 1; j < i; j++)
{
// 判断是否是当前数字的因数,并存储
if (i % j == 0)
{
a[k] = j;
k++;
}
}
// 遍历已存储的因数累加求和
for (h = 0; h < k; h++)
{
s += a[h];
}
// 相等则是完数
if (i == s)
{
returnStr = returnStr + i + ",";
sum++;
}
}
if (sum > 0)
{
returnStr = number + "以内完数有" + sum + "个,分别是:" + returnStr.Substring(0, returnStr.Length - 1) + "。";
}
else
{
returnStr = number + "以内没有完数。";
}
return returnStr;
}
斯内科Snake
2014-02-07 · TA获得超过523个赞
知道小有建树答主
回答量:707
采纳率:50%
帮助的人:243万
展开全部
static void Main(string[] args)
{
for (int i = 1; i < 1000; i++)
{
//获得所有因子 不包含自身,添加到集合中
List<int> list = new List<int>();
for (int j = 1; j < i; j++)
{
if (i % j == 0)
{
list.Add(j);
}
}
//为集合所有元素求和
int sum = 0;
for (int k = 0; k < list.Count; k++)
{
sum += list[k];
}
if (sum == i)
{
Console.WriteLine("[{0:D3}]是完数。", i);
}
}
Console.ReadLine();
}
//结果只有 6 、28 、496三个
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wuxd7
2014-02-06 · TA获得超过323个赞
知道小有建树答主
回答量:452
采纳率:100%
帮助的人:285万
展开全部
遍历?不需要思考的算法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式