简体   繁体   中英

Armstrong Number java

I've got a problem with some simple code. I haven't seen where is the problem in my code. It returns false when it should return true , since 153 is an Armstrong Number.

Following is my code:

public class Armstrong {

   static double nArms, unidad, decena, centena, aux;


   Armstrong(){

   }

   Armstrong(double nArms){
      this.nArms = nArms;
   }

   public boolean esArmstrong(double nArms){

    aux = nArms % 100;
    centena = nArms / 100;
    decena = aux / 10;
    unidad = aux % 10;


    this.nArms = Math.pow(unidad, 3) + Math.pow(decena, 3) +Math.pow(centena, 3);

    if(this.nArms == nArms){
        return true;
    }else{
        return false;
    }
}



public static void main(String[] args) {

    Armstrong arms = new Armstrong();


    System.out.println(arms.esArmstrong(153));



}

}

You are using double when you intend to do integer arithmetic. For example, when you write

centena = nArms / 100;

you are doing floating point division, (and centena is assigned the value 1.53 ) but you want to perform integer division. Use int , long (or BigInteger) instead.

As others already mentioned never use Double for Integer calculation Now If I were you I would have optimized my code to this

int check=0;
int n=num; // num is user-input number
while(n>0)//suppose n =153
{
int rem=n%10;
check=check+(int)Math.pow(rem,3);
n=n/10;
}
if(check==num)
System.out.println(num+" is Armstrong");

/*First time while loop runs rem = 3 and n= 15
So check = 0+3*3*3=27
Second time while loop runs rem = 5  and n= 1
So check = 27+5*5*5 = 152
Again n =1 so rem = 1 and check = 152+1*1*1 = 153
This time the thw while fails the exits
ultimately check == num so it is armstrong */
import java.util.Scanner;

public class Armstrong {
public static void main(String args[]) {
    System.out.println("Input number of digit to find out Armstrong");
    Scanner sc = new Scanner(System.in);
    int r = sc.nextInt();
    String s[] = new String[r];
    System.out.println("Please enter digits");
    StringBuilder sb = new StringBuilder(r);
    for (int i = 0; i < r; i++) {
        String userInput = sc.next();
        s[i] = userInput;
        sb.append(s[i]);
    }
    int e = Integer.parseInt(sb.toString()); //this is the Integer value entered to check Armstrong number

    int d;
    int k[] = new int[r];
    for (int j = 0; j < r; j++) {
        d = Integer.parseInt(s[j]);
        k[j] = d * d * d * d* d* d;
    }
    int m[] = new int[r + 1];
    int n[] = new int[r];
    for (int l = 1; l <= r; l++) {
        n[l - 1] = m[l - 1] + k[l - 1];
        m[l] = n[l - 1];
    }
    if (e == m[r]) {
        System.out.println("Entered number is Armstrong number");
    } else {
        System.out.println("Entered number is not an Armstrong number");
    }
}
public void isArmstrong(String n)
  {
    char[] s=n.toCharArray();
    int sum=0;
    for(char num:s)
    {
        int i=Integer.parseInt(Character.toString(num));
        int cube=i*i*i;
        sum +=cube;
                
    }

    if(sum==Integer.parseInt(n))
    {
        System.out.println("Its an Armstrong Number");
    }
    else
    {
        System.out.println("Its not an Armstrong Number");
    }

  }

import java.util.*; public class Main {

public static void check_armstrong(int n)
{
     /*Function to check whether a number is an armstrong number or not
    Print true if yes else false */

    int sum=0;
    int temp=n;
    while(n>0){
        int remainder=n%10;
        sum+=remainder*remainder*remainder;
        n=n/10;
    }
    if(temp==sum){
        System.out.println(true);
    }else
    System.out.println(false);
    
  
    
    
    
   
   
    /* Do not change the code beyond this point*/
    

}
 public static void main(String[]args)
{
    Scanner sc=new Scanner(System.in);
    int n =sc.nextInt();
    
    check_armstrong(n);
}

}

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the number");
    int a, c, d, e = 0, temp = 0;
    a = sc.nextInt();
    c = a;
    int z = a;
    while (c > 0) {
        c = c / 10;
        temp++;
    }

    System.out.println("//");
    int temp2 = temp;

    while (temp2 > 0) {
        int temp1 = 1;

        d = a % 10;
        for (int i = 0; i < temp; i++) {
            temp1 = temp1 * d;

        }
        e = e + temp1;

        a = a / 10;
        temp2--;
    }
    if (z == e) {
        System.out.println("number is armstrong");
    } else {

        System.out.println("number is not armstrong");
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM