# Number

## 進制轉換

10進位 integer to string %10 /10

```
Given integer n

int[] digits
int len
while(len > 0){
    digits[len--] = n%10;
    n/=10;
}
```

## 13. Roman to Integer

Given a roman numeral, convert it to an integer.

The answer is guaranteed to be within the range from 1 to 3999.

* 7 characters
* Add number from left to right
* Test if left char is smaller than cur char

```java
def romanToInt(self, s: str) -> int:
    dic = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
    num = dic[s[0]]
    
    for i in range(1, len(s)):
        num += dic[s[i]]
        if dic[s[i]] > dic[s[i-1]]:
            num -= dic[s[i-1]]*2

    return num
```

## 12 Integer to Roman

Given an integer, convert it to a roman numeral.

The number is guaranteed to be within the range from 1 to 3999.

* 13 strings
* 倍數數字 = 該roman number 重複數

```java
def intToRoman(self, num: int) -> str:
    intList = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
    romanList = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]
    
    ans = ''
    
    for i in range(13):
        while num >= intList[i]:
            ans += romanList[i]
            num -= intList[i]
            
    return ans
```

## 8. String to Integer(atoi)

* Leetcode 8
* Use long store
* The number could be bigger than Long

```python
def myAtoi(self, str: str) -> int:
    str = str.strip(' ')
    
    num = 0
    isNeg = False
    
    for c in str:
        if not c.isdigit(): 
            if c == '-': isNeg = True
            continue
        
        if not isNeg:
            if (num > (2**31)//10) or (num == 2**31//10 and int(c) > 7): return 2**31-1
        if isNeg:
            if (num > (2**31)//10) or (num == 2**31//10 and int(c) > 8): return -2**31
        num = num*10 + int(c)
        
    return num if not isNeg else -num 
```

## 50. Pow(x, n)

```python
def myPow(self, x: float, n: int) -> float:
    if n == 0: return 1
    isExpPositive = True
    if n < 0: 
        n = -n
        isExpPositive = False
        
    num = 1
        
    while n :
        if n%2:
            num *= x 
        x *= x
        n = int(n/2)

    return num if isExpPositive else 1/num
```

## 69. Sqrt

```python
def mySqrt(self, x: int) -> int:
    if x < 2:
        return x
    
    start, end = 2, x//2 - 1
    
    while start < end:
        mid = (start + end)//2
        if mid**2 > x:
            end = mid 
        elif mid**2 < x:
            start = mid + 1
        else:
            return mid
    
    return start - 1
```

## 273 Integer to English Word

Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.

```python
def numberToWords(self, num: int) -> str:
    LESS_THAN_20 = ['', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve','Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen']
    TEN = ['', 'Ten', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']
    THOUSAND = ['Billion', 'Million', 'Thousand', '']
    INDEX = [1000000000, 1000000, 1000, 1]
    
    def helper(num):
        if num < 20: 
            return LESS_THAN_20[num]
        elif num < 100: 
            # 注意要判斷helper回傳是否為空
            n = helper(num%10)
            return TEN[num//10] + ' ' + n if n else TEN[num//10]
        else:
            n = helper(num%100)
            return LESS_THAN_20[num//100] + ' Hundred ' + n \
                if n else LESS_THAN_20[num//100] + ' Hundred'
        
    if num == 0: return 'Zero'
    result = ''
    
    for i in range(len(INDEX)):
        if num//INDEX[i] == 0: continue
        result += helper(num//INDEX[i]) + ' ' + THOUSAND[i] + ' '
        num %= INDEX[i]
        
    return result.strip()
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://netjimmy.gitbook.io/code-interview-note/basic/integer-to-string.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
