Balanced Ternary Number System

• Last Updated : 26 Apr, 2021

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 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 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 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 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 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 codeint 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 systemclass 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 codepublic 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 systemdef 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 Coden = 238 # Function callprint("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 systemusing 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 codepublic 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



Output:
Equivalent Balanced Ternary of 238 is: 100Z11

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up