Номер на Армстронг


Ниво на трудност M
Често задавани в Оракул VMware
Математически

Декларация за проблема

Нека число x, съдържащо n цифри. Ако сумата на всяка цифра е увеличена до мощност n е равно на самото число, тогава се казва, че числото е армстронг число, т.е.

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

Напишете програма за проверка на Армстронг номер

Пример

153
Yes

Обяснение: 13 + 53 + 33

= 1 + 125 + 27

= 153 Следователно 153 е Армстронг номер.

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-то число на армстронг.

Пример:

11
370

Обяснение: 11-то число на Армстронг е 370.

15
8208

алгоритъм

1. Инициализирайте цяло число променлива n.

2. Създайте функция за проверка на армстронг числото, което приема целочислена променлива като свой параметър.

3. Итерирайте над цяло число, посочвайки от 1. Мод номер с 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