Dados dos números A y B, A<=B, la tarea es encontrar el número de números unarios entre A y B, ambos inclusive.
Número unario : Considere el número 28. Si tomamos la suma de los cuadrados de sus dígitos, 2*2 + 8*8, obtenemos 68. Tomando la suma de los cuadrados de los dígitos nuevamente, obtenemos 6*6 + 8*8= 100. Haciendo esto de nuevo, obtenemos 1*1 + 0*0 + 0*0 = 1. Cualquier número de este tipo, que finalmente conduce a 1, se llama número unario.
Ejemplos:
Input : A = 1, B = 10 Output : 3 Input : A = 100, B = 150 Output : 7
La idea es calcular recursivamente la suma de los cuadrados de los dígitos del número y cada vez que se repite, reemplazar el número con la suma calculada.
Los casos base de la recursión serán:
- Si la suma se reduce a 1 o a 7, entonces la respuesta es verdadera.
- Si la suma se reduce a un número entero de un solo dígito distinto de 1 y 7, la respuesta es falsa.
A continuación se muestra la implementación recursiva de este problema:
C++
// CPP program to count unary numbers // in a range #include <iostream> using namespace std; // Function to check if a number is unary bool isUnary(int n) { /// Base case. Note that if we repeat // above process for 7, we get 1. if (n == 1 || n == 7) return true; else if (n / 10 == 0) return false; /// rec case int x, sum = 0; while (n != 0) { x = n % 10; sum = sum + x * x; n = n / 10; } isUnary(sum); } // Function to count unary numbers // in a range int countUnary(int a, int b) { int count = 0; for (int i = a; i <= b; i++) { if (isUnary(i) == 1) count++; } return count; } // Driver Code int main() { int a = 1000, b = 1099; cout << countUnary(a, b); return 0; }
Java
//Java program to count unary numbers // in a range import java.io.*; class GFG { // Function to check if a number is unary static boolean isUnary(int n) { /// Base case. Note that if we repeat // above process for 7, we get 1. if (n == 1 || n == 7) return true; else if (n / 10 == 0) return false; /// rec case int x, sum = 0; while (n != 0) { x = n % 10; sum = sum + x * x; n = n / 10; } return isUnary(sum); } // Function to count unary numbers // in a range static int countUnary(int a, int b) { int count = 0; for (int i = a; i <= b; i++) { if (isUnary(i) == true) count++; } return count; } // Driver Code public static void main (String[] args) { int a = 1000, b = 1099; System.out.println (countUnary(a, b)); } //This code is contributed by ajit }
Python3
# Python 3 program to count unary numbers # in a range # Function to check if a number is unary def isUnary(n): # Base case. Note that if we repeat # above process for 7, we get 1. if (n == 1 or n == 7): return True elif (int(n / 10) == 0): return False # rec case sum = 0 while (n != 0): x = n % 10 sum = sum + x * x n = int(n / 10) return isUnary(sum) # Function to count unary numbers # in a range def countUnary(a, b): count = 0 for i in range(a, b + 1, 1): if (isUnary(i) == 1): count += 1 return count # Driver Code if __name__ == '__main__': a = 1000 b = 1099 print(countUnary(a, b)) # This code is contributed by # Sanjit_Prasad
C#
//C# program to count unary numbers // in a range using System; public class GFG { // Function to check if a number is unary static bool isUnary(int n) { /// Base case. Note that if we repeat // above process for 7, we get 1. if (n == 1 || n == 7) return true; else if (n / 10 == 0) return false; /// rec case int x, sum = 0; while (n != 0) { x = n % 10; sum = sum + x * x; n = n / 10; } return isUnary(sum); } // Function to count unary numbers // in a range static int countUnary(int a, int b) { int count = 0; for (int i = a; i <= b; i++) { if (isUnary(i) == true) count++; } return count; } // Driver Code public static void Main () { int a = 1000, b = 1099; Console.WriteLine(countUnary(a, b)); } //This code is contributed by 29AjayKumar }
Javascript
<script> // Javascript program to count unary // numbers in a range // Function to check if a number is unary function isUnary(n) { /// Base case. Note that if we repeat // above process for 7, we get 1. if (n == 1 || n == 7) return true; else if (parseInt(n / 10, 10) == 0) return false; /// rec case let x, sum = 0; while (n != 0) { x = n % 10; sum = sum + x * x; n = parseInt(n / 10, 10); } return isUnary(sum); } // Function to count unary numbers // in a range function countUnary(a, b) { let count = 0; for (let i = a; i <= b; i++) { if (isUnary(i) == true) count++; } return count; } let a = 1000, b = 1099; document.write(countUnary(a, b)); </script>
13
Publicación traducida automáticamente
Artículo escrito por Kushdeep_Mittal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA