C 语言中的水仙花数

如何使用 While 循环、For 循环、函数和递归来编写 C 语言的水仙花数程序?我们还将向您展示打印 1 到 n 之间的水仙花数的程序。

如果给定的数字等于该整数中存在的每个数字的 n 次幂之和,则该数字就是 C 语言编程中的水仙花数。例如,153 是水仙花数,因为 153 中的所有个位数 = 3
153 = 1³ + 5³ + 3³
= 1 + 125 + 27 = 153

以下步骤将向您展示在 C 语言编程中检查水仙花数的标准方法。

  1. 输入任何值。
  2. 将给定的数分成单个数字(例如,将 153 分成 1、5 和 3)。
  3. 计算每个数字的 n 次幂并将这些数字相加。
  4. 将原始值与总和值进行比较。如果完全匹配,则它是。否则,它不是。

使用 While 循环检查水仙花数的 C 程序

此程序允许用户输入任何正整数。然后,此程序将使用 While 循环检查数字是否为水仙花数。

#include <stdio.h>
#include <math.h>

int main(void)
{
    int Number, Temp, Reminder, Times =0, Sum = 0;
    
    printf("Please Enter number to Check = ");
    scanf("%d", &Number);
    
    //Helps to prevent altering the original value
    Temp = Number;
    while (Temp != 0)
    {
        Times = Times + 1;
        Temp = Temp / 10;
    }
    
    Temp = Number;
    while( Temp > 0)
    {
        Reminder = Temp %10;
        Sum = Sum + pow(Reminder, Times);
        Temp = Temp /10;
    }
    
    printf("Sum of entered number is = %d\n", Sum);
    
    if ( Number == Sum )
        printf("%d is Armstrong Number.\n", Number);
    else
        printf("%d is not.\n", Number);
    
    return 0;
}
C Armstrong Number program Using While Loop

这个 C 语言水仙花数程序允许用户输入任何正整数。接下来,将其分配给一个变量。接下来,我们将原始值分配给 Temp 变量。这将帮助我们保留实际值,然后对 Temp 变量进行所有操作。

While 循环将确保给定的值大于 0。while 循环内的语句将分割值并计算给定值内的所有个位数。

如果您不理解此程序逻辑,请参考C 语言统计数字个数的程序文章。

第二个While 循环将确保给定的整数大于 0。让我们看看这个C 语言编程 while 循环的迭代工作原理。

对于这个 C 语言的水仙花数演示,用户输入的值:Number = 1634 且 Sum = 0
Temp = Number
Temp = 1634

第一次迭代
Reminder = Temp %10
Reminder = 1634 % 10 = 4

Sum = Sum + pow (Reminder, Times)

对于这个例子,Times = 3,因为 1634 中的数字是 4。所以,这个水仙花数中的 pow() 函数会将 Reminder 乘以 4 次。

Sum = Sum + (Reminder * Reminder * Reminder * Reminder)
Sum = 0 + (4 * 4 * 4 * 4) => 0 + 256
Sum = 256

Temp = Temp /10 = 1634 /10
Temp = 163

注意:如果位数是 5,Reminder 将乘以 5 次。

第二次迭代:从第一次迭代开始,Temp 和 Sum 的值都已更改,Temp = 163 且 Sum = 256

Reminder = 163 % 10 = 3

Sum = 256 + (3 * 3 * 3 * 3)
Sum = 256 + 81 => 337

Temp = 163 /10 = 16

C 语言水仙花数程序第三次迭代:Temp = 16 且 Sum = 337

Reminder = 16 % 10 = 6

Sum = 337 + (6 * 6 * 6 * 6) => 337 + 1296
Sum = 1633

Temp = 16 /10 = 1

水仙花数程序的第四次迭代:Temp = 1 且 Sum = 1633

Reminder = 1 % 10 = 0

Sum = 1633 + (1 * 1 * 1 * 1)
Sum = 1633 + 1 => 1634

Temp = 1/10 = 0

在这里,temp = 0。因此,此水仙花数程序中的 while 循环条件将失败。

if (Number== Sum ) – 条件将检查用户输入的值是否正好等于 Sum。如果此条件为 True,则表示是,否则不是。

if(1634 == 1634) – TRUE。

注意:如果数字小于 1000,则移除用于计算数字的 while 循环。接下来,替换以下代码。

Sum = Sum + pow(Reminder, Times);

With

Sum = Sum + (Reminder * Reminder * Reminder)

使用 For 循环的水仙花数 C 程序

此程序允许用户输入任何正整数。然后,此程序将使用 For 循环检查数字是否为水仙花数。

// using For Loop

#include <stdio.h>
#include <math.h>

int main(void)
{
    int Num, Temp, Reminder, Times =0, Sum = 0;
    
    printf("\nPlease Enter any num \n");
    scanf("%d", &Num);
    
    for(Temp = Num; Temp != 0;Temp = Temp / 10)
    {
        Times = Times + 1;
    }
    
    for(Temp = Num; Temp > 0; Temp =  Temp /10 )
    {
        Reminder = Temp % 10;
        Sum = Sum + pow(Reminder, Times);
    }
    
    printf("Sum = %d\n", Sum);
    
    if ( Num == Sum )
        printf("\n%d is Armstrong.\n", Num);
    else
        printf("%d is not.\n", Num);
    
    return 0;
}

我们将上面示例中的 While 循环替换为 For 循环。请参考C 语言编程中的 For 循环来理解此程序。

使用函数的 C 语言水仙花数程序

此程序允许用户输入任何正整数。接下来,此程序将使用函数检查数字是否为水仙花数。

// using Functions 
#include <stdio.h>
#include <math.h>

int Check_Arm(int);

int main()
{
  int num, Sum = 0;
 
  printf("\nPlease Enter any value \n");
  scanf("%d", &num);

  Sum = Check_Arm (num);
  printf("Sum = %d\n", Sum);

  if ( num == Sum )
      printf("\n%d is Armstrong.\n", num);
  else
      printf("%d is not.\n", num);
 
  return 0;
}

int Check_Arm (int num)
{
  int Temp, Reminder, Times =0, Sum = 0;
  
  Temp = num;
  
  while (Temp != 0) 
   {
     Times = Times + 1;
     Temp = Temp / 10;
   }
  
  for(Temp = num; Temp > 0; Temp =  Temp /10 )
   {
     Reminder = Temp %10;
     Sum = Sum + pow(Reminder, Times);
   }
  return Sum;
}

在此程序中,当编译器在 main() 程序中到达 Sum = Check_Arm(num); 行时,编译器将立即跳转到下面的函数

int Check_Arm (int Number)

我们在上面的示例中已经解释了它的逻辑。

注意:如果我们使用 Void 创建函数,则无需返回值。但是,如果我们声明一个具有任何数据类型(int、float 等)的函数,我们必须从函数返回一些值。

使用递归查找水仙花数的 C 程序

程序允许您输入任何正整数。接下来,使用递归概念,此程序将检查数字是否为水仙花数。

此程序在函数内部使用了 Check_Arm (Number/10) 语句。此语句将帮助使用更新后的值递归地调用函数。如果您在完成第一行后缺少此语句,它将终止。例如,Num = 153,则输出将是 27

让我们看看这个程序的 If 条件。

if (Num > 0) 将检查 num 是否大于 0。对于递归函数,在递归使用函数之前放置条件非常重要。否则,我们将陷入无限执行(如无限循环)。

#include <stdio.h>
#include <math.h>

int Check_Arm (int, int);

int main(void)
{
    int Number, Sum = 0, Times =0,Temp;
    
    printf("Please Enter num = ");
    scanf("%d", &Number);
    
    for(Temp = Number; Temp != 0; Temp = Temp / 10)
    {
        Times = Times + 1;
    }
    
    Sum = Check_Arm (Number, Times);
    printf("Sum of entered is = %d\n", Sum);
    
    if ( Number == Sum )
        printf("%d is Armstrong.\n", Number);
    else
        printf("%d is not.\n", Number);
    
    return 0;
}

int Check_Arm (int Number, int Times)
{
    static int Reminder, Sum = 0;
    
    if (Number > 0)
    {
        Reminder = Number %10;
        Sum = Sum + pow(Reminder, Times);
        Check_Arm (Number /10, Times);
        return Sum;
    }
    else
        return 0;
}
Program to Check Armstrong Number using Recursion Function

C 语言打印 1 到 1000(或 n)之间的水仙花数

此程序允许您输入最小值和最大值。此程序查找并打印最小值和最大值之间的水仙花数。

For Loop 帮助编译器在 Minimum 和 Maximum 变量之间进行迭代。迭代从 Minimum 开始,然后不会超过 Maximum 变量。

if(n==Sum) -- 条件将检查迭代是否正好等于其反向。如果此条件为 True,则表示它是水仙花数。否则,它不是。因此,如果此条件为 True,则打印语句将执行。

// between 1 to N or 1000
#include<stdio.h>
#include <math.h>

int Check_Arm (int);

int main(void)
{
    int n,Reminder,Reverse,Temp, Sum;
    int Minimum,Maximum;
    
    printf("\nPlease Enter the Minimum & Maximum Values\n");
    scanf("%d %d",&Minimum, &Maximum);
    
    printf("Between %d and %d are:\n",Minimum, Maximum);
    for(n = Minimum; n <= Maximum; n++)
    {
        Sum = Check_Arm (n);
        
        if(n == Sum)
            printf("%d ",n);
    }
    printf("\n");
}

int Check_Arm (int n)
{
    int Temp, Reminder, Times =0, Sum = 0;
    
    for(Temp = n; Temp != 0; Temp = Temp / 10) {
        Times = Times + 1;
    }
    
    for(Temp = n; Temp > 0; Temp =  Temp /10 )
    {
        Reminder = Temp %10;
        Sum = Sum + pow(Reminder, Times);
    }
    
    return Sum;
}
C Program to Print Armstrong Numbers between 1 to N