លេខ Armstrong


កម្រិតលំបាក មធ្យម
សួរញឹកញាប់ ក្រុមហ៊ុន Oracle VMware
គណិតវិទ្យា

សេចក្តីថ្លែងការណ៍បញ្ហា។

សូមអោយលេខមួយដែលមានលេខ n ។ ប្រសិនបើផលបូកនៃខ្ទង់នីមួយៗត្រូវបានលើកឡើង អំណាច n ស្មើនឹងចំនួនខ្លួនវាបន្ទាប់មកលេខត្រូវបានគេនិយាយថាជាចំនួន armstrong ពោលគឺ

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

សរសេរកម្មវិធីដើម្បីពិនិត្យមើលលេខ Armstrong

ឧទាហរណ៍

153
Yes

ការពន្យល់: 13 5 +3 3 +3

= ១ + ១២៥ + ២៧

= ១៥៣ ដូច្នេះ ១៥៣ ជាក អាមស្ត្រង ចំនួន។

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 ជាចំនួនតួរលេខនៅក្នុងអថេរចំនួនគត់ដែលបានផ្តល់ព្រោះយើងកំពុងស្វែងរកនិទស្សន្តសំរាប់ខ្ទង់នៃលេខទាំងអស់។

ស្មុគស្មាញអវកាស៖

អូ (១) ព្រោះយើងប្រើចន្លោះថេរ។

កម្មវិធី 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

កម្មវិធីចាវ៉ា

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

សរសេរកម្មវិធីមួយដើម្បីរកលេខ Armstrong n'th ។

ឧទាហរណ៍:

11
370

ការពន្យល់ៈលេខ Armstrong ទី ១១ គឺ ៣៧០ ។

15
8208

ក្បួនដោះស្រាយ

១. ផ្តើមអថេរអថេរចំនួនគត់ n ។

2. បង្កើតមុខងារដើម្បីពិនិត្យមើលចំនួន armstrong ដែលទទួលយកអថេរចំនួនគត់ដែលជាប៉ារ៉ាម៉ែត្ររបស់វា។

៣. បូកសរុបលើលេខគត់ដែលមានលេខពីលេខ ១ Mod ជាមួយ ១០ ដើម្បីទទួលបានខ្ទង់ចុងក្រោយ។ រកលេខរបស់លេខ n ហើយបន្ថែមទៅផលបូក។

4. ចែកលេខដោយ 10 ។

៥. ពិនិត្យមើលថាតើផលបូកស្មើនឹងចំនួនការធ្វើបច្ចុប្បន្នកម្មបង្កើនចំនួន។

6. ប្រសិនបើការរាប់ស្មើនឹង n ត្រឡប់ចំនួនលេខដែលមានបច្ចុប្បន្ន។

ស្មុគស្មាញពេលវេលា៖

O (log (n) * log (log (n)) ដែល n ជាចំនួនតួលេខនៅក្នុងអថេរចំនួនគត់ដែលបានផ្តល់។

ស្មុគស្មាញអវកាស៖

អូ (១) ព្រោះយើងបានប្រើទំហំបន្ថែមថេរ។

កម្មវិធី 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

កម្មវិធីចាវ៉ា

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