Αριθμός Armstrong


Επίπεδο δυσκολίας Μέσον
Συχνές ερωτήσεις μαντείο VMware
μαθηματικά

Δήλωση προβλήματος

Αφήστε έναν αριθμό x που περιέχει n ψηφία. Εάν το άθροισμα κάθε ψηφίου αυξάνεται σε δύναμη Το n είναι ίσο με τον ίδιο τον αριθμό, τότε ο αριθμός λέγεται ότι είναι δυνατός αριθμός δηλαδή

abc… = pow (a, n) + pow (b, n) + pow (c, n) + ……

Γράψτε ένα πρόγραμμα για να ελέγξετε τον Armstrong Number

Παράδειγμα

153
Yes

Επεξήγηση: 13 + 53 + 33

= 1 + 125 + 27

= 153 Επομένως, το 153 είναι ένα Armstrong αριθμό.

1634
Yes
123
No

Αλγόριθμος

1. Initialize an integer variable n.
2. Create a function to check the armstrong number which accepts an integer variable as it's parameter.
3. Find the length of the number.
4. Iterate while the number is greater than 0, mod number with 10. Find the digit's power n and add to sum. Divide the number by 10.
5. Check if sum and original number are equal or not.
6. If yes, Print "Yes".
7. Else print "No".

Ανάλυση πολυπλοκότητας

Χρόνος πολυπλοκότητας:

O (log (n) * log (log (n)) όπου n είναι ο αριθμός των ψηφίων στη δεδομένη ακέραια μεταβλητή επειδή βρίσκουμε εκθετικότητα για όλα τα ψηφία αριθμών.

Διαστημική πολυπλοκότητα:

O (1) επειδή χρησιμοποιήσαμε σταθερό χώρο.

Πρόγραμμα C ++

#include<bits/stdc++.h>
using namespace std;

int expo(int a, int b){
    int res = 1;
    while(b>0){
        if(b&1)
            res = res*a;
        a = a*a;
        b = b>>1;
    }
    return res;
}

bool checkArmstrong(int x){
    int l = 0, n = x;
    while(n){
        l++;
        n = n/10;
    }
    int sum=0;
    n = x;
    while(n){
        int digit = n%10;
        sum += expo(digit, l);
        n = n/10;
    }
    return(sum == x);
}

int main(){
    int n = 153;
    if(checkArmstrong(n))
        cout<<"Yes";
    else
        cout<<"No";
    return 0;
}
Yes

Πρόγραμμα Java

import java.lang.Math;
class Armstrong{ 
    
    boolean checkArmstrong(int x){ 
        int l = 0, n = x; 
        while(n!=0){ 
            l++; 
            n = n/10; 
        }
        int sum=0;
        int num = x;
        while(num!=0){ 
            int digit = num%10; 
            sum += Math.pow(digit, l); 
            num = num/10; 
        }
        return(sum == x); 
    } 
  
    public static void main(String[] args){ 
        Armstrong a = new Armstrong(); 
        int n = 153; 
        if(a.checkArmstrong(n))
            System.out.println("Yes");
        else
            System.out.println("No");
    } 
}
Yes

Γράψτε ένα πρόγραμμα για να βρείτε το n'th armstrong αριθμό.

Παράδειγμα:

11
370

Επεξήγηση: Ο 11ος αριθμός Armstrong είναι 370.

15
8208

Αλγόριθμος

1. Εκκινήστε μια ακέραια μεταβλητή n.

2. Δημιουργήστε μια συνάρτηση για να ελέγξετε τον αριθμό armstrong που δέχεται μια ακέραια μεταβλητή ως παράμετρος της.

3. Επαναλάβετε έναν ακέραιο αριθμό από 1. Αριθμός mod με 10 για να λάβετε το τελευταίο ψηφίο. Βρείτε τη δύναμη του ψηφίου n και προσθέστε στο άθροισμα.

4. Διαιρέστε τον αριθμό με το 10.

5. Ελέγξτε εάν το άθροισμα είναι ίσο με τον τρέχοντα αριθμό επανάληψης, αυξήστε τον αριθμό.

6. Εάν η μέτρηση είναι ίση με n, επιστρέψτε τον τρέχοντα αριθμό επανάληψης.

Χρόνος πολυπλοκότητας:

O (log (n) * log (log (n)) όπου n είναι ο αριθμός των ψηφίων στη δεδομένη ακέραια μεταβλητή.

Διαστημική πολυπλοκότητα:

O (1) επειδή χρησιμοποιήσαμε σταθερό επιπλέον χώρο.

Πρόγραμμα C ++

#include<bits/stdc++.h>
using namespace std;

int expo(int a, int b){
    int res = 1;
    while(b>0){
        if(b&1)
            res = res*a;
        a = a*a;
        b = b>>1;
    }
    return res;
}

int nthArmstrong(int n){
    int count=0;

    for(int i=1; i<=INT_MAX; i++){
        int num=i, rem, digit=0, sum=0;

        digit =(int)log10(num)+1;

        while(num>0){
            rem = num % 10;
            sum = sum + expo(rem,digit);
            num = num / 10;
        }
        if(i == sum)
            count++;
        if(count==n)
            return i;
    }
}

int main(){
    int n = 15;
    cout<<nthArmstrong(n);
    return 0;
}
8208

Πρόγραμμα Java

import java.lang.Math; 
  
class Armstrong{ 
      
    static int nthArmstrong(int n){ 
        int count = 0; 
          
        for(int i=1; i<=Integer.MAX_VALUE; i++){ 
            int num = i, rem, digit = 0, sum = 0; 
              
            digit = (int) Math.log10(num) + 1; 
              
            while(num > 0){  
                rem = num % 10; 
                sum = sum + (int)Math.pow(rem, digit); 
                num = num / 10; 
            } 
              
            if(i == sum) 
                count++; 
            if(count == n) 
                return i; 
        } 
        return n; 
    } 
      
    public static void main(String[] args){ 
        int n = 15; 
        System.out.println(nthArmstrong(n)); 
    } 
}
8208