Balanced Ternary Number System

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 which comprises of digits -1, 0 and 1. Since it is inconvenient to write -1 as a digit, we’ll use 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 ternary number system.
  2. Convert ternary to balanced ternary system, using 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 left to right, 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 of negative sign before the number. All negative numbers in balanced ternary system starts 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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


 
 

Output: 

Equivalent Balanced Ternary of 238 is: 100Z11





 

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Tech Enthusiast and Logical Thinker, loves to code and to learn new technology

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : SHIVAMSINGH67, Rajput-Ji