Open In App

XOR and OR of all N-digit Armstrong numbers

Improve
Improve
Like Article
Like
Save
Share
Report

Given an integer N, the task is to find the XOR and OR values of all N-digit Armstrong numbers.

Examples

Input: N = 3 
Output: XOR = 271, OR = 511 
153, 370, 371, 407 are the three digit armstrong numbers

Input: N = 4 
Output: XOR = 880, OR = 10098 
 

Approach: 

  • Find the starting and ending number of N-digit Armstrong number by:
Starting N-digit Armstrong number = pow(10, n - 1)
Ending N-digit Armstrong number   = pow(10, n) - 1
  • Iterate over the N-digit Armstrong numbers from starting number till ending number and check whether that number is Armstrong or not.
  • If the number is Armstrong, then take XOR and OR of that number separately.
  • Else proceed for next iteration and print the value of XOR and OR after all iterations.

Below is the implementation of the above approach:  

C++14




// C++ program to find the XOR
// and OR of all Armstrong numbers
// of N digits
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a number
// is Armstrong or not
bool isArmstrong(int x, int n)
{
    int sum1 = 0;
    int temp = x;
    while (temp > 0) {
        int digit = temp % 10;
        sum1 += (int)pow(digit, n);
        temp /= 10;
    }
    return sum1 == x;
}
 
// Function to find XOR of all
// N-digits Armstrong number
void CalculateXORandOR(int n)
{
 
    // To store the XOR and OR of all
    // Armstrong number
    int CalculateXOR = 0;
    int CalculateOR = 0;
 
    // Starting N-digit
    // Armstrong number
    int start = (int)pow(10, n - 1);
 
    // Ending N-digit
    // Armstrong number
    int end = (int)pow(10, n) - 1;
     
    // Iterate over starting and
    // ending number
    for (int i = start; i < end + 1; i++)
    {
 
        // To check if i is
        // Armstrong or not
        if (isArmstrong(i, n)) {
            CalculateXOR = CalculateXOR ^ i;
            CalculateOR = CalculateOR | i;
        }
    }
     
    // Print the XOR and OR of all
    // Armstrong number
    cout << "XOR = " << CalculateXOR << endl;
    cout << "OR = " << CalculateOR << endl;
}
 
// Driver Code
int main()
{
 
    int n = 4;
    CalculateXORandOR(n);
}
 
// This code is contributed by shivanisinghss2110


Java




// Java program to find the XOR
// and OR of all Armstrong numbers
// of N digits
import java.io.*;
class GFG
{
     
    // Function to check if a number
    // is Armstrong or not
    static boolean isArmstrong(int x, int n) {
        int sum1 = 0;
        int temp = x;
        while (temp > 0) {
            int digit = temp % 10;
            sum1 += Math.pow(digit, n);
            temp /= 10;
        }
        return sum1 == x;
    }
 
    // Function to find XOR of all
    // N-digits Armstrong number
    static void CalculateXORandOR(int n) {
 
        // To store the XOR and OR of all
        // Armstrong number
        int CalculateXOR = 0;
        int CalculateOR = 0;
 
        // Starting N-digit
        // Armstrong number
        int start = (int) Math.pow(10, n - 1);
 
        // Ending N-digit
        // Armstrong number
        int end = (int) (Math.pow(10, n)) - 1;
         
        // Iterate over starting and
        // ending number
        for (int i = start; i < end + 1; i++) {
 
            // To check if i is
            // Armstrong or not
            if (isArmstrong(i, n)) {
                CalculateXOR = CalculateXOR ^ i;
                CalculateOR = CalculateOR | i;
            }
        }
         
        // Print the XOR and OR of all
        // Armstrong number
        System.out.println("XOR = " + CalculateXOR);
        System.out.println("OR = " + CalculateOR);
    }
 
    // Driver Code
    public static void main(String[] args) {
 
        int n = 4;
        CalculateXORandOR(n);
    }
}
 
// This code is contributed by 29AjayKumar


Python3




# Python3 program to find the XOR
# and OR of all Armstrong numbers
# of N digits
 
# Function to check if a number
# is Armstrong or not
def isArmstrong (x, n):
    sum1 = 0 
    temp =
    while temp > 0:
        digit = temp % 10
        sum1 += digit **n
        temp //= 10
    return sum1 == x
 
# Function to find XOR of all
# N-digits Armstrong number
def CalculateXORandOR(n) :
 
    # To store the XOR and OR of all
    # Armstrong number
    CalculateXOR = 0
    CalculateOR = 0
 
    # Starting N-digit
    # Armstrong number
    start = 10 ** (n - 1)
 
    # Ending N-digit
    # Armstrong number
    end = (10**n) - 1
    # Iterate over starting and
    # ending number
    for i in range( start, end + 1) :
 
        # To check if i is
        # Armstrong or not
        if (isArmstrong(i, n)) :
            CalculateXOR = CalculateXOR ^ i
            CalculateOR = CalculateOR | i
 
    # Print the XOR and OR of all
    # Armstrong number
    print("XOR = ", CalculateXOR)
    print("OR = ", CalculateOR)
 
# Driver Code
if __name__ == "__main__" :
 
    n = 4;
    CalculateXORandOR(n);


C#




// C# program to find the XOR
// and OR of all Armstrong numbers
// of N digits
using System;
 
class GFG
{
     
    // Function to check if a number
    // is Armstrong or not
    static bool isArmstrong(int x, int n) {
        int sum1 = 0;
        int temp = x;
        while (temp > 0) {
            int digit = temp % 10;
            sum1 += (int)Math.Pow(digit, n);
            temp /= 10;
        }
        return sum1 == x;
    }
 
    // Function to find XOR of all
    // N-digits Armstrong number
    static void CalculateXORandOR(int n) {
 
        // To store the XOR and OR of all
        // Armstrong number
        int CalculateXOR = 0;
        int CalculateOR = 0;
 
        // Starting N-digit
        // Armstrong number
        int start = (int) Math.Pow(10, n - 1);
 
        // Ending N-digit
        // Armstrong number
        int end = (int) (Math.Pow(10, n)) - 1;
         
        // Iterate over starting and
        // ending number
        for (int i = start; i < end + 1; i++) {
 
            // To check if i is
            // Armstrong or not
            if (isArmstrong(i, n)) {
                CalculateXOR = CalculateXOR ^ i;
                CalculateOR = CalculateOR | i;
            }
        }
         
        // Print the XOR and OR of all
        // Armstrong number
        Console.WriteLine("XOR = " + CalculateXOR);
        Console.WriteLine("OR = " + CalculateOR);
    }
 
    // Driver Code
    public static void Main(String[] args) {
 
        int n = 4;
        CalculateXORandOR(n);
    }
}
 
// This code is contributed by PrinciRaj1992


Javascript




<script>
 
// Javascript program to find the XOR
// and OR of all Armstrong numbers
// of N digits
 
// Function to check if a number
// is Armstrong or not
function isArmstrong(x, n)
{
    let sum1 = 0;
    let temp = x;
     
    while (temp > 0)
    {
        let digit = temp % 10;
        sum1 += Math.pow(digit, n);
        temp = parseInt(temp / 10, 10);
    }
    return (sum1 == x);
}
 
// Function to find XOR of all
// N-digits Armstrong number
function CalculateXORandOR(n)
{
     
    // To store the XOR and OR of all
    // Armstrong number
    let CalculateXOR = 0;
    let CalculateOR = 0;
 
    // Starting N-digit
    // Armstrong number
    let start = Math.pow(10, n - 1);
 
    // Ending N-digit
    // Armstrong number
    let end = (Math.pow(10, n)) - 1;
       
    // Iterate over starting and
    // ending number
    for(let i = start; i < end + 1; i++)
    {
         
        // To check if i is
        // Armstrong or not
        if (isArmstrong(i, n))
        {
            CalculateXOR = CalculateXOR ^ i;
            CalculateOR = CalculateOR | i;
        }
    }
       
    // Print the XOR and OR of all
    // Armstrong number
    document.write("XOR = " + CalculateXOR + "</br>");
    document.write("OR = " + CalculateOR + "</br>");
}
 
// Driver code
let n = 4;
CalculateXORandOR(n);
 
// This code is contributed by divyeshrabadiya07  
 
</script>


Output: 

XOR =  880
OR =  10098

 

Time Complexity: O((10n – 10n-1) * log10n)
Auxiliary Space: O(1)



Last Updated : 20 Dec, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads