我必须编写一个函数来打印每个“强”整数,介于1和n之间。这些整数验证每个数字的阶乘的总和等于它自己。例如:
145因为1! + 4! + 5! = 145.
到目前为止我做了什么:
public static long Fac(long n)
{
var i = 1;
for (; n > 1; n--)
{
i *= (int) n;
}
return i;
}
public static bool IsStrong(int n)
{
var i = 1;
var sum = 0;
while (n > 0)
{
i = n % 10;
sum += (int)Fac(i);
n = n / 10;
}
if (sum == n)
return true;
else
return false;
}
public static void Print_Strong(int n)
{
if (IsStrong(n))
Console.Write("{0} is STRONG! -W", n);
else
Console.Write("{0} is not strong. -w", n);
}
当我运行它时,它永远不会离开循环。
答案 0 :(得分:1)
您的代码中有3个问题:
while (n >= 0)
应为while (n > 0)
,否则您永远不会
离开循环。sum == n
将永远不会成立,因为n最终会为0 这是一个修复:
public static bool IsStrong(int n)
{
long sum = 0;
int n2 = n;
while (n2 > 0)
{
sum += Fac(n2 % 10);
n2 = n2 / 10;
}
return sum == n;
}