Open In App

Balanced Ternary Number System

Improve
Improve
Like Article
Like
Save
Share
Report

As we already know, a Binary number system is a number system that has only 2 digits in it, i.e. 0 and 1. Similarly, we also know that a Ternary number system is a number system that has only 3 digits in it, i.e. 0, 1, and 2. In this article, we will learn about Balanced Ternary Number System.

A balanced ternary number system is a numeral system that comprises digits -1, 0, and 1. Since it is inconvenient to write -1 as a digit, we’ll use the letter Z further for this purpose.

Conversion of Decimal to Balanced Ternary system 

The conversion from Decimal to balanced ternary is done in two steps:  

  1. Convert decimal to the ternary number system.
  2. Convert ternary to the balanced ternary system, using the below steps: 
    • traverse the ternary number, right to left by leaving 0 and 1 as it is
    • when encounter 2, change it to Z and add +1 to the next digit in iteration.
    • Some digits may become +3, then replace +3 with 0 and add +1 to next digit in iteration.
    • complete this process until you convert all the digits.

Example: convert 23810 to balanced ternary and vice-versa 

First convert 23810 to ternary number system
23810 = 222113 
Second convert ternary to balanced ternary number system : 

  • By starting iteration from right to left, two 1’s are skipped as it remains same in balanced ternary.
  • Now convert first encountered 2 with z increasing it’s next digit in iteration by +1. So we get 23Z11.
  • Convert 3 to 0 with increment +1 in it’s next digit in iteration. So we get 30Z11.
  • Convert 3 to 0 with increment +1 in it’s next digit in iteration. So we get 100Z11. (Here assume 0 is present before most significant digit)

The final result is 100Z11.

Note: The system also allows representation of negative numbers eliminating the need for a negative sign before the number. All negative numbers in a balanced ternary system start with Z. i.e.

?110 = Z3, 
?210 = Z13, 
?310 = Z03, 
?410 = ZZ3, 
?510 = Z113  

Below is the program to convert positive decimals into the balanced ternary system:

C++




// C++ program to convert positive
// decimals into balanced ternary system
 
#include <bits/stdc++.h>
 
using namespace std;
 
string balancedTernary(int n)
{
    string output = "";
    while (n > 0) {
        int rem = n % 3;
        n = n / 3;
        if (rem == 2) {
            rem = -1;
            n++;
        }
        output = (rem == 0 ? '0' : (rem == 1) ? '1' : 'Z')
                 + output;
    }
    return output;
}
 
// Driver code
int main()
{
 
    int n = 238;
 
    cout << "Equivalent Balanced Ternary of " << n
         << " is: " << balancedTernary(n);
 
    return 0;
}


Java




// Java program to convert positive
// decimals into balanced ternary system
class GFG{
 
static String balancedTernary(int n)
{
    String output = "";
    while (n > 0)
    {
        int rem = n % 3;
        n = n / 3;
        if (rem == 2)
        {
            rem = -1;
            n++;
        }
        output = (rem == 0 ? '0' :
                 (rem == 1) ? '1' : 'Z') + output;
    }
    return output;
}
 
// Driver code
public static void main(String[] args)
{
    int n = 238;
 
    System.out.print("Equivalent Balanced Ternary of " +
                      n + " is: " + balancedTernary(n));
}
}
 
// This code is contributed by Rajput-Ji


Python3




# Python3 program to convert positive
# decimals into balanced ternary system
def balancedTernary(n):
 
    output = ""
     
    while(n > 0):
        rem = n % 3
        n = n // 3
         
        if(rem == 2):
            rem = -1
            n += 1
 
        if(rem == 0):
            output = '0' + output
        else:
            if(rem == 1):
                output = '1' + output
            else:
                output = 'Z' + output
 
    return output
 
# Driver Code
n = 238
 
# Function call
print("Equivalent Balanced Ternary of",
       n , "is:", balancedTernary(n))
 
# This code is contributed by Shivam Singh


C#




// C# program to convert positive
// decimals into balanced ternary system
using System;
using System.Collections.Generic;
class GFG{
 
static String balancedTernary(int n)
{
    String output = "";
    while (n > 0)
    {
        int rem = n % 3;
        n = n / 3;
        if (rem == 2)
        {
            rem = -1;
            n++;
        }
        output = (rem == 0 ? '0' :
                 (rem == 1) ? '1' : 'Z') + output;
    }
    return output;
}
 
// Driver code
public static void Main(String[] args)
{
    int n = 238;
 
    Console.Write("Equivalent Balanced Ternary of " +
                   n + " is: " + balancedTernary(n));
}
}
 
// This code is contributed by Rajput-Ji


Javascript




<script>
 
// Javascript program to convert positive
// decimals into balanced ternary system
 
function balancedTernary(n)
{
    var output = "";
    while (n > 0) {
        var rem = n % 3;
        n = parseInt(n / 3);
        if (rem == 2) {
            rem = -1;
            n++;
        }
        output = (rem == 0
                      ? '0'
                      : (rem == 1)
                            ? '1'
                            : 'Z')
                 + output;
    }
    return output;
}
 
// Driver code
var n = 238;
document.write( "Equivalent Balanced Ternary of "
     + n + " is: "
     + balancedTernary(n));
 
 
</script>


Output: 

Equivalent Balanced Ternary of 238 is: 100Z11

 

Time Complexity: O(log3n)

Auxiliary Space: O(log3n)



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