遍历确实是最简单的方法了,根据条件求完数,代码如下(根据所求数的递增,运算速度会变的非常慢): /// <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;
}
温馨提示:内容为网友见解,仅供参考