如何使用 While 循环、For 循环和递归函数编写 C 语言强数程序?本文还将介绍如何编写一个 C 程序来打印 1 到 n 之间的强数。
使用 While 循环的 C 语言强数程序
此程序允许用户输入任何正整数。然后,此程序将使用 While 循环检查该数字是否为强数。
#include <stdio.h>
int main()
{
int Number, Temp, Reminder, Sum = 0, i;
long Factorial;
printf("\nPlease Enter a Number to Check for Strong Number \n");
scanf("%d", &Number);
//Helps to prevent altering the original value
Temp = Number;
while( Temp > 0)
{
Factorial = 1, i = 1;
Reminder = Temp % 10;
while (i <= Reminder)
{
Factorial = Factorial * i;
i++;
}
printf("\n Factorial of %d = %d\n", Reminder, Factorial);
Sum = Sum + Factorial;
Temp = Temp /10;
}
printf("\n Sum of the Factorials of a Given Number %d is = %d\n", Number, Sum);
if ( Number == Sum )
printf("\n %d is a Strong Number.\n", Number);
else
printf("\n %d is not a Strong Number.\n", Number);
return 0;
}

这个 C 语言强数程序允许用户输入任何正整数。它会将该数字分配给 Number 变量。
接下来,我们将原始值分配给 Temp 变量。这有助于我们在对 Temp 变量进行所有操作时保留原始值。
下面的 C 编程 While 循环将确保给定的数字大于 0,While 循环中的语句将拆分数字并查找给定数字中每个数字的阶乘。如果您不理解该逻辑,请参考 C 语言统计数字位数程序 文章。
在这里,C 强数程序中的第一个 while 循环(外部)将数字拆分成单个数字。接下来,内部 while 循环将计算该数字的阶乘。我建议您参考 C 语言求阶乘程序 文章来理解阶乘背后的逻辑。
此示例中用户输入的数值:Number = 145 and Sum = 0
Temp = Number
Temp = 145
第一次迭代
Reminder = Temp % 10
Reminder = 145 % 10 = 5
现在,它将进入内部 While 循环。在这里,它将计算 5 的阶乘,即 120。
Sum = Sum +120
Sum = 0 + 120 => 120
Temp = Temp /10
Temp = 145 /10 => 14
第二次迭代
从 C 语言判断强数程序的第一次迭代开始,Temp 和 Sum 的值都已更改为 Temp = 14 和 Sum = 120
Reminder = Temp % 10
Reminder = 14 % 10 = 4
现在,它将进入内部 While 循环。在这里,它将计算 4 的阶乘,即 24。
Sum = 120 + 24
Sum = 144
Temp = 14 /10 => 1
第三次迭代
从强数程序的第三次迭代开始,两个值都已更改为 Temp = 1 和 Sum = 144
Reminder = 1 % 10 = 0
这里,1 的阶乘是 1
Sum = 144 + 1 = 145
Temp = 1 / 10 => 0
这里,Temp = 0,因此 while 循环条件将失败
if ( Number== Sum ) – 条件将检查用户输入的数字是否严格等于 Sum 数字。如果此条件为 True,则它是强数。否则,它不是。
在这个强数程序中,我将用另一个值进行检查
Please Enter a Number to Check
153
Factorial of 3 = 6
Factorial of 5 = 120
Factorial of 1 = 1
Sum of the Factorials of a Given Number 153 is = 127
153 is not.
使用 For 循环的 C 语言强数程序
此程序允许用户输入任何正整数。然后,此程序将使用 For 循环检查该数字是否为强数。
#include <stdio.h>
int main()
{
int Num, Temp, Reminder, Sum = 0, i;
long Factorial;
printf("\nPlease Enter a Number \n");
scanf("%d", &Num);
//Helps to prevent altering the original value
Temp = Num;
for(Temp = Num; Temp > 0; Temp = Temp / 10 )
{
Factorial = 1;
Reminder = Temp % 10;
for (i = 1; i <= Reminder; i++)
{
Factorial = Factorial * i;
}
printf(" Fact of %d = %d\n", Reminder, Factorial);
Sum = Sum + Factorial;
}
printf("\n Sum of the Factorials of %d is = %d\n", Num, Sum);
if ( Number == Sum )
printf("\n %d is a Strong.\n", Num);
else
printf("\n %d is not.\n", Num);
return 0;
}

让我用另一个数字来检查。
Please Enter a Number to Check
26
Factorial of 6 = 720
Factorial of 2 = 2
Sum of the Factorials of 26 is = 722
26 is not.
我们只是用 For 循环替换了上面强数示例中的 While 循环。如果您不理解,请参考此处的文章:For 循环。
使用递归检查强数的 C 程序
此 程序允许您输入任何正整数。然后,此程序将使用 递归 或递归函数概念检查该数字是否为强数。在这里,您也可以尝试使用普通 函数来计算阶乘。
#include <stdio.h>
long Calculate_Factorial(int);
int main()
{
int Number, Temp, Reminder, Sum = 0;
long Factorial;
printf("\nPlease Enter a Number to Check \n");
scanf("%d", &Number);
//Helps to prevent altering the original value
Temp = Number;
for(Temp = Number; Temp > 0; Temp = Temp / 10 )
{
Factorial = 1;
Reminder = Temp % 10;
// Calling Calculate_factorial Function
Factorial = Calculate_Factorial(Reminder);
printf("Factorial of %d = %d\n", Reminder, Factorial);
Sum = Sum + Factorial;
}
printf("\nSum of the Factorials of %d is = %d\n", Number, Sum);
if ( Number == Sum )
printf("\n%d is a Strong.\n", Number);
else
printf("\n%d is not.\n", Number);
return 0;
}
long Calculate_Factorial(int Number)
{
if (Number == 0 || Number == 1)
return 1;
else
return Number * Calculate_Factorial (Number -1);
}

查找 1 到 n 之间的强数的 C 程序
这允许用户输入最小值和最大值。此程序将查找最小值和最大值之间的强数。
#include <stdio.h>
int SrNum(int);
int main()
{
int Number, Temp, Sum = 0, Minimum, Maximum;
printf("\nPlease Enter the Minimum & Maximum Values\n");
scanf("%d %d",&Minimum, &Maximum);
for(Number = Minimum; Number <= Maximum; Number++)
{
Temp = Number;
Sum = SrNum(Temp);
if ( Number == Sum )
printf("\n%d is a Strong Number.\n", Number);
}
return 0;
}
long CalFact(int Num)
{
if (Num == 0 || Num == 1)
return 1;
else
return Num * CalFact(Num -1);
}
int SrNum(int Num)
{
int Temp, Reminder, Sum = 0;
long Factorial;
Temp = Num;
for(Temp = Num; Temp > 0; Temp = Temp / 10 )
{
Factorial = 1;
Reminder = Temp % 10;
Factorial = CalFact(Reminder);
Sum = Sum + Factorial;
}
return Sum;
}

此程序允许用户输入最小值和最大值。接下来,下面显示的 For 循环有助于编译器在最小值和最大值变量之间进行迭代。迭代从最小值开始。然后,它不会超过最大变量。