# 1408. Problem - Number in Base RepresentationBase Representation

Convert number into different base representation.

## 1. Requirement

Convert an integer number into positive base 2 representation and negative base 2 representation.

## 2. Solution

### 2.1 Positive Base 2

Example:

Input  : n = 13, base = 2
Output : 1101
1*(8) + 1*(4) + 0*(2) + 1*(1)  = 13


Implementation.

public String base2(int n) {
StringBuilder res = new StringBuilder();
while (n != 0) {
res.append(n & 1);
n = n >> 1;
}
return res.length() > 0 ? res.reverse().toString() : "0";
}


### 2.2 Negative Base 2

Example:

Input  : n = 13, base = -2
Output : 11101
1*(16) + 1*(-8) + 1*(4) + 0*(-2) + 1*(1)  = 13


Implementation.

public String baseNeg2(int n) {
StringBuilder res = new StringBuilder();
while (n != 0) {
res.append(n & 1);
n = -(n >> 1);
}
return res.length() > 0 ? res.reverse().toString() : "0";
}


Test class.

public class Base2Test {

@Test
public void testBase2() {
System.out.println("testBase2");
Base2 instance = new Base2();
assertEquals("101", instance.base2(5));
assertEquals("1101", instance.base2(13));
assertEquals("100000", instance.base2(32));
}

@Test
public void testBaseNeg2() {
System.out.println("testBaseNeg2");
Base2 instance = new Base2();
assertEquals("101", instance.baseNeg2(5));
assertEquals("11101", instance.baseNeg2(13));
assertEquals("1100000", instance.baseNeg2(32));
}
}


### 2.3 Generic Solution

Generic solution for any base.

public class GenericBase {
// Given a decimal number n and an integer k, Convert decimal number n to base-k.
public String base(int n, int k) {
if (n == 0) {
return "0";
}

String ans = "";
while (n != 0) {
int r = n % k;
n /= k;

// if remainder is negative, add abs(base) to it and add 1 to n
if (r < 0) {
r += (-k);
n += 1;
}

// convert remainder to string add into the result
if (r <= 9) {
ans = r + ans;
} else {
ans = (char)(r - 10 + 'A') + ans;
}
}

return ans;
}
}


Test class.

public class GenericBaseTest {

@Test
public void testGenericBase() {
System.out.println("testGenericBase");
GenericBase instance = new GenericBase();
assertEquals("101", instance.base(5, 2));
assertEquals("1101", instance.base(13, 2));
assertEquals("100000", instance.base(32, 2));

assertEquals("101", instance.base(5, -2));
assertEquals("11101", instance.base(13, -2));
assertEquals("1100000", instance.base(32, -2));

assertEquals("21", instance.base(17, 8));
assertEquals("36", instance.base(30, 8));

assertEquals("11", instance.base(17, 16));
assertEquals("1E", instance.base(30, 16));
}
}