Contact Learn C
Copy

Program 25:To know all the armstrong numbers between 1 and given number

Program 25:
 
#include<stdio.h>
#include<math.h>
main()
{
  int num,i,j,temp1,temp2,sum=0;;
  printf("Enter a number to know all armstrong number between them\n");
  scanf("%d",&num);
  printf("Armstrong numbers are:\n");
  for(i=1;i<=num;i++)
  {
    sum=0;
    temp1=i; 
    temp2=i; 
    while(temp1>0)
    {
      j=temp1%10;
      sum+=pow(j,3);
      temp1=temp1/10;
    }
    if(sum==temp2)
    {
      printf("%d\n",sum);
    }
  }
}
Explanation: 
  1. The program starts with initializing :
    • i → used as a variable
    • j → used variable
    • temp1 → to store value of number fetching from 'i' for future reference.
    • temp2 → to store value of number fetching from 'i' for future reference.
    • num → To store user input
    • sum → To store the final output initialized with zero
  2. printf("Enter a number to know all armstrong 
            number between them\n");
    scanf("%d",&num);
    Used to take input from user say (num=1000)
  3. for(i=1;i<=num;i++) 
    {   
    sum=0;
    temp1=i;
    temp2=i;
    To traverse for 1 to num(1000 from example) to obtain all armstrong numbers one by one by checking every number from 1 to 1000(num).
    • temp1,temp2 stores the value of 'i' which will generate number to check whether they are armstrong or not.If the i value is '1' as it is armstrong then 1 will be printed.Same as 370 and 371 else it won't print.
  4. while(temp1>0)
    {
    j=temp1%10;
    sum+=pow(j,3);
    temp1=temp1/10;
    }
    if(sum==temp2)
    {
    printf("%d\n",sum);
    }
    This is the main logic written inside for loop
    • Iteration 1 of forloop: i=1;temp1=i →temp1=1;temp2=i →temp2=1;
      • Iteration 1 of while loop as temp1>0 so the loop executes
        • j=temp1%10 → 1%10 → 1
        • sum=sum+pow(j,3) → 0+1^3 →sum=1
        • temp1=temp1/10 →1/10 →0 →temp1=0
        • final values after 1st iteration of while loop i=1,temp2=1,j=1,sum=1,temp1=0
      • Iteration 2 of while loop:-Now temp1 is not >0 so the loop terminates
      • Now compiler checks sum==temp2 or not where temp2 stores the original value of number which we wanted to check for armstrong number. As sum=1,temp2=1.Condition proves to be true so the 1 is printed
    • Iteration 2 of forloop: i=2;temp1=i →temp1=2;temp2=i →temp2=2;
      • Iteration 1 of while loop as temp1>0 so the loop executes
        • j=temp1%10 → 2%10 → 2
        • sum=sum+pow(j,3) → 0+2^3 →sum=8
        • temp1=temp1/10 →2/10 →0 →temp1=0
        • final values after 1st iteration of while loop i=2,temp2=2,j=2,sum=8,temp1=0
      • Iteration 2 of while loop:-Now temp1 is not >0 so the loop terminates
      • Now compiler checks sum==temp2 . As sum=8,temp2=2.Condition proves to be false so if condition is not executed and then moves to next step.
    • Step 2 which is iteration 2 of forloop will not print 3,4,5,6,...152 as they are not armstrong numbers.
    • The above will go on until next Armstrong is detected which is 153.Lets see how it will print 153 as armstrong number.
    • Iteration 153 of forloop: i=153;temp1=i →temp1=153;temp2=i →temp2=153;
      • Iteration 1 of while loop as temp1>0 so the loop executes
        • j=temp1%10 → 153%10 → 3
        • sum=sum+pow(j,3) → 0+3^3 →sum=27
        • temp1=temp1/10 →153/10 →15 →temp1=15
        • final values after 1st iteration of while loop i=153,temp2=153,j=3,sum=27,temp1=15
      • Iteration 2 of while loop:-15>0 which is true and while loop is executed
        • j=temp1%10 → 15%10 → 5
        • sum=sum+pow(j,3) → 27+5^3 →sum=27+125 →152
        • temp1=temp1/10 →15/10 →1 →temp1=1
        • final values after 1st iteration of while loop i=153,temp2=153,j=5,sum=152,temp1=1
      • Iteration 3 of while loop:-1>0 which is true and while loop is executed
        • j=temp1%10 → 1%10 → 1
        • sum=sum+pow(j,3) → 152+1^3 →sum=152+1→153
        • temp1=temp1/10 →1/10 →0 →temp1=0
        • final values after 1st iteration of while loop i=153,temp2=153,j=1,sum=153,temp1=0
      • Iteration 4 of while loop:-0>0 which is not true so while loop is terminated
      • Now compiler checks sum==temp2 or not. As sum=153,temp2=153.Condition proves to be true so the 153 is printed
    • The same way as above continues till 1000 and prints all the armstrong numbers which are remaining 370,371,407.


 Output:

To know all the armstrong numbers between 1 and given number

 
Donate

Download App and Learn when ever you want

Get it on PlayStore
Get it on Amazon App Store
Get it on Aptoide