Armstrong Numbers Between Two Integers using c program

C Programming Language Loop control in C Language (Article) Loop control in C Language (Program)

132

Tip: Before trying this program, learn what is armstrong-number

Given Input:

Enter two numbers(intervals): 200
2000

Expected Output:

Armstrong numbers between 200 and 2000 are: 370 371 407 1634 

Program:

<span class="com">#include</span><span class="pln"> </span><span class="str">&lt;math.h&gt;</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">int</span><span class="pln"> low</span><span class="pun">,</span><span class="pln"> high</span><span class="pun">,</span><span class="pln"> number</span><span class="pun">,</span><span class="pln"> originalNumber</span><span class="pun">,</span><span class="pln"> rem</span><span class="pun">,</span><span class="pln"> count </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">double</span><span class="pln"> result </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">;</span><span class="pln">
  printf</span><span class="pun">(</span><span class="str">"Enter two numbers(intervals): "</span><span class="pun">);</span><span class="pln">
  scanf</span><span class="pun">(</span><span class="str">"%d %d"</span><span class="pun">,</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln">low</span><span class="pun">,</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln">high</span><span class="pun">);</span><span class="pln">
  printf</span><span class="pun">(</span><span class="str">"Armstrong numbers between %d and %d are: "</span><span class="pun">,</span><span class="pln"> low</span><span class="pun">,</span><span class="pln"> high</span><span class="pun">);</span><span class="pln">

  </span><span class="com">// swap numbers if high &lt; low</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">high </span><span class="pun">&lt;</span><span class="pln"> low</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    high </span><span class="pun">+=</span><span class="pln"> low</span><span class="pun">;</span><span class="pln">
    low </span><span class="pun">=</span><span class="pln"> high </span><span class="pun">-</span><span class="pln"> low</span><span class="pun">;</span><span class="pln">
    high </span><span class="pun">-=</span><span class="pln"> low</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
   
  </span><span class="com">// iterate number from (low + 1) to (high - 1)</span><span class="pln">
  </span><span class="com">// In each iteration, check if number is Armstrong</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="pln">number </span><span class="pun">=</span><span class="pln"> low </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> number </span><span class="pun">&lt;</span><span class="pln"> high</span><span class="pun">;</span><span class="pln"> </span><span class="pun">++</span><span class="pln">number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    originalNumber </span><span class="pun">=</span><span class="pln"> number</span><span class="pun">;</span><span class="pln">

    </span><span class="com">// number of digits calculation</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="pln">originalNumber </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      originalNumber </span><span class="pun">/=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">++</span><span class="pln">count</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    originalNumber </span><span class="pun">=</span><span class="pln"> number</span><span class="pun">;</span><span class="pln">

    </span><span class="com">// result contains sum of nth power of individual digits</span><span class="pln">
    </span><span class="kwd">while</span><span class="pln"> </span><span class="pun">(</span><span class="pln">originalNumber </span><span class="pun">!=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      rem </span><span class="pun">=</span><span class="pln"> originalNumber </span><span class="pun">%</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
      result </span><span class="pun">+=</span><span class="pln"> pow</span><span class="pun">(</span><span class="pln">rem</span><span class="pun">,</span><span class="pln"> count</span><span class="pun">);</span><span class="pln">
      originalNumber </span><span class="pun">/=</span><span class="pln"> </span><span class="lit">10</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">// check if number is equal to the sum of nth power of individual digits</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">((</span><span class="kwd">int</span><span class="pun">)</span><span class="pln">result </span><span class="pun">==</span><span class="pln"> number</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      printf</span><span class="pun">(</span><span class="str">"%d "</span><span class="pun">,</span><span class="pln"> number</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">

    </span><span class="com">// resetting the values</span><span class="pln">
    count </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    result </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span>

Output:

Enter two numbers(intervals): 200
2000
Armstrong numbers between 200 and 2000 are: 370 371 407 1634 

Explanation:

In the program, the outer loop is iterated from (low+ 1) to (high - 1). In each iteration, it's checked whether number is an Armstrong number or not.

Inside the outer loop, the number of digits of an integer is calculated first and stored in count. And, the sum of the power of individual digits is stored in the result variable.

If number is equal to result, the number is an Armstrong number.

Notes:

  • You need to swap low and high if the user input for high is less than that of low. To learn more, check our example on swapping two numbers.
  • You need to reset count and result to 0 in each iteration of the outer loop.

This Particular section is dedicated to Programs only. If you want learn more about C Programming Language. Then you can visit below links to get more depth on this subject.