Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

Balanced Ternary Number System

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

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)


My Personal Notes arrow_drop_up
Last Updated : 30 Sep, 2022
Like Article
Save Article
Similar Reads
Related Tutorials