user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  lea    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movl   $0x0,-0x24(%rbp)
  jmp    L34
L8:
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  mov    -0x20(%rbp),%rax
  test   %rax,%rax
  jne    L4
  lea    D24(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L50
L4:
  mov    $0x9,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x20(%rbp),%rdx
  cmp    %rdx,%rax
  jg     L2
  mov    -0x20(%rbp),%rbx
  mov    $0x9,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %rax,%rcx
  mov    %rbx,%rax
  cqto
  idiv   %rcx
  mov    %rax,%rdi
  call   <num@plt>
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L2:
  mov    -0x20(%rbp),%rbx
  mov    $0x9,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %rax,%rcx
  mov    %rbx,%rax
  cqto
  idiv   %rcx
  mov    %rdx,%rcx
  mov    %rcx,%rax
  mov    %rax,-0x20(%rbp)
  mov    $0x6,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x20(%rbp),%rdx
  cmp    %rdx,%rax
  jg     L79
  mov    -0x20(%rbp),%rbx
  mov    $0x6,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %rax,%rcx
  mov    %rbx,%rax
  cqto
  idiv   %rcx
  mov    %rax,%rdi
  call   <num@plt>
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L79:
  mov    -0x20(%rbp),%rbx
  mov    $0x6,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %rax,%rsi
  mov    %rbx,%rax
  cqto
  idiv   %rsi
  mov    %rdx,%rcx
  mov    %rcx,%rax
  mov    %rax,-0x20(%rbp)
  mov    $0x3,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x20(%rbp),%rdx
  cmp    %rdx,%rax
  jg     L3
  mov    -0x20(%rbp),%rbx
  mov    $0x3,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %rax,%rcx
  mov    %rbx,%rax
  cqto
  idiv   %rcx
  mov    %rax,%rdi
  call   <num@plt>
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L3:
  mov    -0x20(%rbp),%rbx
  mov    $0x3,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %rax,%rsi
  mov    %rbx,%rax
  cqto
  idiv   %rsi
  mov    %rdx,%rcx
  mov    %rcx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <num@plt>
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L50:
  addl   $0x1,-0x24(%rbp)
L34:
  mov    -0x28(%rbp),%eax
  cmp    %eax,-0x24(%rbp)
  jl     L8
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L76
  call   <__stack_chk_fail@plt>
L76:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D27
type: string
name: parse_data
arguments: tag: D30
type: string
name: parse_data
arguments: tag: D24
type: string
name: parse_data
arguments: tag: D13
type: string
name: parse_data
arguments: tag: D28
type: string
name: parse_data
arguments: tag: D40
type: string
name: parse_data
arguments: tag: D3
type: string

tool: D27: %d

tool: D30: %Ld

tool: D24: Zero


tool: D13: Billion 

tool: D28: Million 

tool: D40: Thousand 

tool: D3: 


assistant: ```c
int main() {
  int t, i, j;
  long long n;
  scanf("%d", &t);
  for (i = 0; i < t; i++) {
    scanf("%Ld", &n);
    if (n == 0)
      printf("Zero\n");
    else {
      if (n >= pow(10, 9)) {
        num(n / (long long)pow(10, 9));
        printf("Billion ");
      }
      n = n % (long long)pow(10, 9);
      if (n >= pow(10, 6)) {
        num(n / (long long)pow(10, 6));
        printf("Million ");
      }
      n = n % (long long)pow(10, 6);
      if (n >= pow(10, 3)) {
        num(n / (long long)pow(10, 3));
        printf("Thousand ");
      }
      n = n % (long long)pow(10, 3);
      num(n);
      printf("\n");
    }
  }
  return 0;
}
```