# Check if given number is stable or unstable

The given problem is to check whether a given number is stable or unstable. A stable number is one where all the digits have the same frequency, while an unstable number has different frequencies for its digits. For example, the number 112233 is stable because the digit '1' appears twice, '2' appears twice, and '3' appears twice. On the other hand, the number 89198 is unstable because the digit '8' appears twice, '9' appears once, and '1' appears once.

## Explanation with Suitable Example

Let's take the number 112233 to illustrate how the code works:

1. We initialize an array called `result` of size 10, where each index represents a digit (0 to 9). The purpose of this array is to store the frequency of each digit in the given number.

2. The `frequency()` function is called, which calculates the frequency of digits in the number and updates the `result` array accordingly. For the number 112233, the `result` array would be: `[0, 2, 2, 2, 0, 0, 0, 0, 0, 0]`.

3. The `stable_no()` function then checks the `result` array to determine if the number is stable or unstable. It does this by comparing the frequency of each digit with the frequency of the first non-zero digit. In our example, the first non-zero digit is '2', and its frequency is 2. So, we compare the frequency of all other digits with 2. If any digit's frequency differs from 2, the number is considered unstable.

4. In the example of 112233, the frequencies of all digits are 2, so the function determines that the number is stable and prints the output as "112233 Is an stable number."

## Pseudocode

``````function frequency(number, result):
while number is not 0:
temp = number % 10
if temp < 0:
temp = -temp
result[temp]++
number = number / 10

function stable_no(number):
create an array result of size 10, initialized with zeros
auxiliary = 0
status = 1
call frequency(number, result)
for i from 0 to 9:
if result[i] is not 0:
if auxiliary is 0:
auxiliary = result[i]
else if auxiliary is not result[i]:
status = 0
break
if status is 0:
print number, "Is not a stable number"
else:
print number, "Is an stable number"

function main():
call stable_no(123)
call stable_no(1111)
call stable_no(89198)
call stable_no(112233)
call stable_no(10101)
``````

## Algorithm Explanation

1. The `frequency()` function takes an integer `number` and an array `result` as input. It calculates the frequency of digits in `number` and stores the frequencies in the `result` array.

2. The `stable_no()` function takes an integer `number` as input. It initializes an array `result` of size 10 with zeros. It then calls the `frequency()` function to calculate the frequency of digits in the `number`.

3. The function `stable_no()` uses a variable `auxiliary` to keep track of the frequency of the first non-zero digit encountered in the `result` array.

4. It uses a variable `status` to keep track of whether the number is stable or not. The initial value of `status` is set to 1 (stable).

5. The function then iterates through the `result` array. If it encounters a non-zero frequency, it checks if `auxiliary` is 0 (which means it's the first non-zero frequency encountered), and if so, it sets `auxiliary` to that frequency. If `auxiliary` is not 0, it compares the current frequency with `auxiliary`. If they are different, it means the number is unstable, and `status` is set to 0 (unstable).

6. After the loop, the function checks the value of `status`. If it's 0, it prints that the number is not stable. Otherwise, it prints that the number is stable.

## Code Solution

Here given code implementation process.

``````//C Program
//Check if given number is stable or unstable
#include <stdio.h>

//Calculate the frequency of digits in number
void frequency(int number, int result[])
{
int temp = 0;
while (number != 0)
{
temp = number % 10;
if (temp < 0)
{
//When get negative number
temp = -temp;
}
//modify the value of temp index element in result array
result[temp]++;
number /= 10;
}
}
void stable_no(int number)
{
//resultant array which is store the frequency of number digits
int result;
for (int i = 0; i < 10; ++i)
{
//Set the initial value of each element to zero
result[i] = 0;
}
int auxiliary = 0, status = 1;
//Calculate number digit frequency
frequency(number, result);
for (int i = 0; i < 10 && status == 1; ++i)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (result[i] != 0)
{
if (auxiliary == 0)
{
//get first number frequency
auxiliary = result[i];
}
else if (auxiliary != result[i])
{
//When no two numbers frequency are same in given number
//here, break the loop execution
status = 0;
}
}
}
if (status == 0)
{
printf("%d Is not a stable number\n", number);
}
else
{
printf("%d Is an stable number\n", number);
}
printf("\n");
}
int main()
{
//Test Case
stable_no(123);
stable_no(1111);
stable_no(89198);
stable_no(112233);
stable_no(10101);
return 0;
}```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number
``````
``````/*
C++ Program
Check if given number is stable or unstable
*/
#include<iostream>

using namespace std;
class MyNumber
{
public:
//Calculate the frequency of digits in number
void frequency(int number, int *result)
{
int temp = 0;
while (number != 0)
{
temp = number % 10;
if (temp < 0)
{
//When get negative number
temp = -temp;
}
//modify the value of temp index element in result array
result[temp]++;
number /= 10;
}
}
void stable_no(int number)
{
int *result = new int;
for (int i = 0; i < 10; ++i)
{
//Set the initial value of each element to zero
result[i] = 0;
}
int auxiliary = 0, status = 1;
//Calculate number digit frequency
this->frequency(number, result);
for (int i = 0; i < 10 && status == 1; ++i)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (result[i] != 0)
{
if (auxiliary == 0)
{
//get first number frequency
auxiliary = result[i];
}
else if (auxiliary != result[i])
{
//When no two numbers frequency are same in given number
//here, break the loop execution
status = 0;
}
}
}
if (status == 0)
{
cout << "" << number << " Is not a stable number\n";
}
else
{
cout << "" << number << " Is an stable number\n";
}
cout << "\n";
}
};
int main()
{
MyNumber obj =  MyNumber();
//Test Case
obj.stable_no(123);
obj.stable_no(1111);
obj.stable_no(89198);
obj.stable_no(112233);
obj.stable_no(10101);
return 0;
}```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number
``````
``````/*
C# Program
Check if given number is stable or unstable
*/
using System;
public class MyNumber
{
//Calculate the frequency of digits in number
public void frequency(int number, int[] result)
{
int temp = 0;
while (number != 0)
{
temp = number % 10;
if (temp < 0)
{
//When get negative number
temp = -temp;
}
//modify the value of temp index element in result array
result[temp]++;
number /= 10;
}
}
public void stable_no(int number)
{
//resultant array which is store the frequency of number digits
int[] result = new int;
for (int i = 0; i < 10; i++)
{
//Set the initial value of each element to zero
result[i] = 0;
}
int auxiliary = 0, status = 1;
//Calculate number digit frequency
frequency(number, result);
for (int i = 0; i < 10 && status == 1; i++)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (result[i] != 0)
{
if (auxiliary == 0)
{
//get first number frequency
auxiliary = result[i];
}
else if (auxiliary != result[i])
{
//When no two numbers frequency are same in given number
//here, break the loop execution
status = 0;
}
}
}
if (status == 0)
{
Console.Write("" + number + " Is not a stable number\n");
}
else
{
Console.Write("" + number + " Is an stable number\n");
}
Console.Write("\n");
}
public static void Main(String[] args)
{
MyNumber obj = new MyNumber();
//Test Case
obj.stable_no(123);
obj.stable_no(1111);
obj.stable_no(89198);
obj.stable_no(112233);
obj.stable_no(10101);
}
}```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number
``````
``````/*
Java Program
Check if given number is stable or unstable
*/
public class MyNumber
{
//Calculate the frequency of digits in number
public void frequency(int number, int[] result)
{
int temp = 0;
while (number != 0)
{
temp = number % 10;
if (temp < 0)
{
//When get negative number
temp = -temp;
}
//modify the value of temp index element in result array
result[temp]++;
number /= 10;
}
}
public void stable_no(int number)
{
//resultant array which is store the frequency of number digits
int[] result = new int;
for (int i = 0; i < 10; ++i)
{
//Set the initial value of each element to zero
result[i] = 0;
}
int auxiliary = 0, status = 1;
//Calculate number digit frequency
frequency(number, result);
for (int i = 0; i < 10 && status == 1; ++i)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (result[i] != 0)
{
if (auxiliary == 0)
{
//get first number frequency
auxiliary = result[i];
}
else if (auxiliary != result[i])
{
//When no two numbers frequency are same in given number
//here, break the loop execution
status = 0;
}
}
}
if (status == 0)
{
System.out.print("" + number + " Is not a stable number\n");
}
else
{
System.out.print("" + number + " Is an stable number\n");
}
System.out.print("\n");
}
public static void main(String[] args)
{
MyNumber obj = new MyNumber();
//Test Case
obj.stable_no(123);
obj.stable_no(1111);
obj.stable_no(89198);
obj.stable_no(112233);
obj.stable_no(10101);
}
}```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number
``````
``````<?php
/*
Php Program
Check if given number is stable or unstable
*/
class MyNumber
{
//Calculate the frequency of digits in number
public 	function frequency(\$number, & \$result)
{
\$temp = 0;
while (\$number != 0)
{
\$temp = \$number % 10;
if (\$temp < 0)
{
//When get negative number
\$temp = -\$temp;
}
//modify the value of temp index element in result array
\$result[\$temp]++;
\$number = intval(\$number / 10);
}
}
public 	function stable_no(\$number)
{
//resultant array which is store the frequency of number digits
//Set the initial value of each element to zero
\$result = array_fill(0, 10, 0);
\$auxiliary = 0;
\$status = 1;
//Calculate number digit frequency
\$this->frequency(\$number, \$result);
for (\$i = 0; \$i < 10 && \$status == 1; ++\$i)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (\$result[\$i] != 0)
{
if (\$auxiliary == 0)
{
//get first number frequency
\$auxiliary = \$result[\$i];
}
else if (\$auxiliary != \$result[\$i])
{
//When no two numbers frequency are same in given number
//here, break the loop execution
\$status = 0;
}
}
}
if (\$status == 0)
{
echo("". \$number ." Is not a stable number\n");
}
else
{
echo("". \$number ." Is an stable number\n");
}
echo("\n");
}
}

function main()
{
\$obj = new MyNumber();
//Test Case
\$obj->stable_no(123);
\$obj->stable_no(1111);
\$obj->stable_no(89198);
\$obj->stable_no(112233);
\$obj->stable_no(10101);
}
main();```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number
``````
``````/*
Node Js Program
Check if given number is stable or unstable
*/
class MyNumber
{
//Calculate the frequency of digits in number
frequency(number, result)
{
var temp = 0;
while (number != 0)
{
temp = number % 10;
if (temp < 0)
{
//When get negative number
temp = -temp;
}
//modify the value of temp index element in result array
result[temp]++;
number = parseInt(number / 10);
}
}
stable_no(number)
{
//resultant array which is store the frequency of number digits
//Set the initial value of each element to zero
var result = Array(10).fill(0);
var auxiliary = 0;
var status = 1;
//Calculate number digit frequency
this.frequency(number, result);
for (var i = 0; i < 10 && status == 1; ++i)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (result[i] != 0)
{
if (auxiliary == 0)
{
//get first number frequency
auxiliary = result[i];
}
else
if (auxiliary != result[i])
{
//When no two numbers frequency are same in given number
//here, break the loop execution
status = 0;
}
}
}
if (status == 0)
{
process.stdout.write("" + number + " Is not a stable number\n");
}
else
{
process.stdout.write("" + number + " Is an stable number\n");
}
process.stdout.write("\n");
}
}

function main(args)
{
var obj = new MyNumber();
//Test Case
obj.stable_no(123);
obj.stable_no(1111);
obj.stable_no(89198);
obj.stable_no(112233);
obj.stable_no(10101);
}
main();```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number
``````
``````#   Python 3 Program
#   Check if given number is stable or unstable

class MyNumber:
# Calculate the frequency of digits in number
def frequency(self, number, result):
temp = 0
while (number != 0):
temp = number % 10
if (temp < 0):
# When get negative number
temp = -temp

# modify the value of temp index element in result array
result[temp] += 1
number = int(number / 10)

def stable_no(self, number):
# Set the initial value of each element to zero
result =  * 10
i = 0
auxiliary = 0
status = 1
# Calculate number digit frequency
self.frequency(number, result)
while (i < 10 and status == 1):
# Check that the resultant array
# [i] location frequency is greater than zero or not
if (result[i] != 0):
if (auxiliary == 0):
# get first number frequency
auxiliary = result[i]

elif (auxiliary != result[i]):
# When no two numbers frequency are same in given number
# here, break the loop execution
status = 0

i += 1

if (status == 0):
print("", number ," Is not a stable number\n", end = "")

else:
print("", number ," Is an stable number\n", end = "")

print("\n", end = "")

def main():
obj = MyNumber()
# Test Case
obj.stable_no(123)
obj.stable_no(1111)
obj.stable_no(89198)
obj.stable_no(112233)
obj.stable_no(10101)

if __name__ == "__main__": main()```
```

#### Output

`````` 123  Is an stable number

1111  Is an stable number

89198  Is not a stable number

112233  Is an stable number

10101  Is not a stable number
``````
``````#   Ruby Program
#   Check if given number is stable or unstable

class MyNumber

# Calculate the frequency of digits in number
def frequency(number, result)

temp = 0
while (number != 0)

temp = number % 10
if (temp < 0)

# When get negative number
temp = -temp
end
# modify the value of temp index element in result array
result[temp] += 1
number /= 10
end
end
def stable_no(number)

# Set the initial value of each element to zero
result = Array.new(10) {0}
i = 0
auxiliary = 0
status = 1
# Calculate number digit frequency
self.frequency(number, result)
while (i < 10 && status == 1)

# Check that the resultant array
# [i] location frequency is greater than zero or not
if (result[i] != 0)

if (auxiliary == 0)

# get first number frequency
auxiliary = result[i]
elsif (auxiliary != result[i])

# When no two numbers frequency are same in given number
# here, break the loop execution
status = 0
end
end
i += 1
end
if (status == 0)

print("", number ," Is not a stable number\n")
else

print("", number ," Is an stable number\n")
end
print("\n")
end
end
def main()

obj = MyNumber.new()
# Test Case
obj.stable_no(123)
obj.stable_no(1111)
obj.stable_no(89198)
obj.stable_no(112233)
obj.stable_no(10101)
end
main()```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number

``````
``````/*
Scala Program
Check if given number is stable or unstable
*/
class MyNumber
{
//Calculate the frequency of digits in number
def frequency(num : Int, result: Array[Int]): Unit = {
var temp: Int = 0;
var number: Int = num;
while (number != 0)
{
temp = number % 10;
if (temp < 0)
{
//When get negative number
temp = -temp;
}
//modify the value of temp index element in result array
result(temp) += 1;
number = (number / 10).toInt;
}
}
def stable_no(number: Int): Unit = {
//Set the initial value of each element to zero
var result: Array[Int] = Array.fill[Int](10)(0);
var i: Int = 0;
var auxiliary: Int = 0;
var status: Int = 1;
//Calculate number digit frequency
frequency(number, result);
while (i < 10 && status == 1)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (result(i) != 0)
{
if (auxiliary == 0)
{
//get first number frequency
auxiliary = result(i);
}
else if (auxiliary != result(i))
{
//When no two numbers frequency are same in given number
//here, break the loop execution
status = 0;
}
}
i += 1;
}
if (status == 0)
{
print("" + number + " Is not a stable number\n");
}
else
{
print("" + number + " Is an stable number\n");
}
print("\n");
}
}
object Main
{
def main(args: Array[String]): Unit = {
var obj: MyNumber = new MyNumber();
//Test Case
obj.stable_no(123);
obj.stable_no(1111);
obj.stable_no(89198);
obj.stable_no(112233);
obj.stable_no(10101);
}
}```
```

#### Output

``````123 Is an stable number

1111 Is an stable number

89198 Is not a stable number

112233 Is an stable number

10101 Is not a stable number
``````
``````/*
Swift Program
Check if given number is stable or unstable
*/
class MyNumber
{
//Calculate the frequency of digits in number
func frequency(_ num:  Int, _ result: inout [Int])
{
var temp: Int = 0;
var number: Int = num;
while (number != 0)
{
temp = number % 10;
if (temp < 0)
{
//When get negative number
temp = -temp;
}
//modify the value of temp index element in result array
result[temp] += 1;
number /= 10;
}
}
func stable_no(_ number: Int)
{
//Set the initial value of each element to zero
var result: [Int] = Array(repeating: 0, count: 10);
var i: Int = 0;
var auxiliary: Int = 0;
var status: Int = 1;
//Calculate number digit frequency
self.frequency(number, &result);
while (i < 10 && status == 1)
{
//Check that the resultant array
//[i] location frequency is greater than zero or not
if (result[i] != 0)
{
if (auxiliary == 0)
{
//get first number frequency
auxiliary = result[i];
}
else
if (auxiliary != result[i])
{
//When no two numbers frequency are same in given number
//here, break the loop execution
status = 0;
}
}
i += 1;
}
if (status == 0)
{
print("", number ," Is not a stable number\n", terminator: "");
}
else
{
print("", number ," Is an stable number\n", terminator: "");
}
print("\n", terminator: "");
}
}
func main()
{
let obj: MyNumber = MyNumber();
//Test Case
obj.stable_no(123);
obj.stable_no(1111);
obj.stable_no(89198);
obj.stable_no(112233);
obj.stable_no(10101);
}
main();```
```

#### Output

`````` 123  Is an stable number

1111  Is an stable number

89198  Is not a stable number

112233  Is an stable number

10101  Is not a stable number
``````

## Resultant Output Explanation

The code is tested with five different test cases:

1. `stable_no(123)`: The number 123 is stable because all its digits (1, 2, and 3) appear once. So, the output is "123 Is an stable number."

2. `stable_no(1111)`: The number 1111 is stable because all its digits (1) appear four times. So, the output is "1111 Is an stable number."

3. `stable_no(89198)`: The number 89198 is unstable because the digit '8' appears twice, '9' appears once, and '1' appears once. So, the output is "89198 Is not a stable number."

4. `stable_no(112233)`: The number 112233 is stable because all its digits (1, 2, and 3) appear twice. So, the output is "112233 Is an stable number."

5. `stable_no(10101)`: The number 10101 is unstable because the digit '0' appears twice, '1' appears three times, and '2' appears once. So, the output is "10101 Is not a stable number."

## Time Complexity of the Code

The time complexity of the code is O(d), where 'd' is the number of digits in the input number. This is because the `frequency()` function iterates through each digit once, and the `stable_no()` function also iterates through the `result` array once, which contains at most 10 elements (the number of digits). Therefore, the overall time complexity is linear in terms of the number of digits in the input number.

## Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.