Home | Tutorials | Articles | Videos | Products | Tools | Search
 Interviews | Open Source | Tag Cloud | Follow Us | Bookmark | Contact
 Java > Core > Special Numbers > Big Armstrong Number

# Big Armstrong Number

An Armstrong number has sum of its digits raised to the power of number of digits equals the number. i.e. An n-digit number equal to the sum of the nth powers of its digits. The following example deals with very big Armstrong numbers. The 39-digit mammoth number `115132219018763992565095597973971522401` is known to be the biggest Armstrong number.

 File Name  : com/bethecoder/tutorials/core/special_numbers/BigArmstrongNumber.java Author  : Sudhakar KV Email  : [email protected]

 ``` package com.bethecoder.tutorials.core.special_numbers; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collections; import java.util.List; /**  * An Armstrong number has sum of digits raised to the power of number of digits   * equals the number  *   * @author Sudhakar KV  *  */ public class BigArmstrongNumber {   /**    * @param args    */   public static void main(String[] args) {          /**      * The largest Armstrong number (in base 10) is the       * 39-digit beast: 115132219018763992565095597973971522401      */     BigInteger number = new BigInteger("115132219018763992565095597973971522401");     isArmstrong(number);   }   private static int getNumOfDigits(BigInteger number) {     return String.valueOf(number).length();   }      private static boolean isArmstrong(BigInteger number) {     BigInteger orgNumber = new BigInteger(number.toString());     BigInteger sum = BigInteger.ZERO;     int digit = 0;     BigInteger digitPow = BigInteger.ZERO;     int numOfDigits = getNumOfDigits(number);     List digits = new ArrayList();     List digitPows = new ArrayList();          while (number.compareTo(BigInteger.ZERO) > 0) {       digit = number.mod(new BigInteger("10")).intValue();       digitPow = new BigInteger(String.valueOf(digit)).pow(numOfDigits);       sum = sum.add(new BigInteger(String.valueOf(digitPow)));       number = number.divide(new BigInteger("10"));              digits.add(digit);       digitPows.add(digitPow);     }          boolean armstrong = sum.equals(orgNumber);     System.out.println(orgNumber + " is " +          (armstrong ? "an armstrong number" : "not an armstrong number") +          " " + getSum(digits, digitPows, numOfDigits, sum));     return armstrong;   }      private static String getSum(List digits,        List digitPows, int numOfDigits, BigInteger sum) {          Collections.reverse(digits);     Collections.reverse(digitPows);     StringBuilder sb = new StringBuilder("[ ");          for (int i = 0 ; i < digits.size(); i ++) {              if (i > 0) {         sb.append(" + ");       }              sb.append(digits.get(i) + "^" + numOfDigits);     }          sb.append(" = ");          for (int i = 0 ; i < digitPows.size(); i ++) {              if (i > 0) {         sb.append(" + ");       }              sb.append(digitPows.get(i));     }     sb.append(" = ").append(sum).append(" ]");     return sb.toString();   } }```

It gives the following output,
```115132219018763992565095597973971522401 is an armstrong number
[ 1^39 + 1^39 + 5^39 + 1^39 + 3^39 + 2^39 + 2^39 + 1^39 + 9^39 +
0^39 + 1^39 + 8^39 + 7^39 + 6^39 + 3^39 + 9^39 + 9^39 + 2^39 +
5^39 + 6^39 + 5^39 + 0^39 + 9^39 + 5^39 + 5^39 + 9^39 + 7^39 +
9^39 + 7^39 + 3^39 + 9^39 + 7^39 + 1^39 + 5^39 + 2^39 + 2^39 +
4^39 + 0^39 + 1^39 =

1 + 1 + 1818989403545856475830078125 + 1 +
4052555153018976267 + 549755813888 + 549755813888 +
1 + 16423203268260658146231467800709255289 +
0 + 1 + 166153499473114484112975882535043072 +
909543680129861140820205019889143 + 2227915756473955677973140996096 +
4052555153018976267 + 16423203268260658146231467800709255289 +
16423203268260658146231467800709255289 + 549755813888 +
1818989403545856475830078125 + 2227915756473955677973140996096 +
1818989403545856475830078125 + 0 + 16423203268260658146231467800709255289 +
1818989403545856475830078125 + 1818989403545856475830078125 +
16423203268260658146231467800709255289 + 909543680129861140820205019889143 +
16423203268260658146231467800709255289 + 909543680129861140820205019889143 +
4052555153018976267 + 16423203268260658146231467800709255289 +
909543680129861140820205019889143 + 1 + 1818989403545856475830078125 +
549755813888 + 549755813888 + 302231454903657293676544 + 0 + 1

= 115132219018763992565095597973971522401 ]

```