user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<Problem10>:
  endbr64
  push   %r12
  lea    D28(%rip),%rdi
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    D133(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D84(%rip),%rdi
  call   <scanf@plt>
  lea    D111(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%ebx
  cmp    $0x63,%ebx
  jle    L58
  lea    -0x384(%rbx),%eax
  cmp    $0x63,%eax
  jbe    L59
  cmp    $0x1f3,%ebx
  jg     L175
  lea    -0x190(%rbx),%eax
  cmp    $0x63,%eax
  jbe    L118
  movslq %ebx,%rbp
  sar    $0x1f,%ebx
  lea    D18(%rip),%r12
  imul   $0x51eb851f,%rbp,%rbp
  sar    $0x25,%rbp
  sub    %ebx,%ebp
  mov    $0x1,%ebx
L212:
  mov    %r12,%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  cmp    %ebx,%ebp
  jge    L212
L150:
  mov    0x4(%rsp),%eax
  jmp    L56
  nopl   0x0(%rax,%rax,1)
L59:
  lea    D142(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
L56:
  movslq %eax,%rbx
  cltd
  imul   $0x51eb851f,%rbx,%rbx
  sar    $0x25,%rbx
  sub    %edx,%ebx
  imul   $0x64,%ebx,%edx
  sub    %edx,%eax
  mov    %eax,0x4(%rsp)
  mov    %eax,%ebx
L58:
  cmp    $0x9,%ebx
  jle    L121
  lea    -0x5a(%rbx),%eax
  cmp    $0x9,%eax
  jbe    L308
  cmp    $0x31,%ebx
  jg     L80
  lea    -0x28(%rbx),%eax
  cmp    $0x9,%eax
  jbe    L82
  movslq %ebx,%rbp
  sar    $0x1f,%ebx
  lea    D27(%rip),%r12
  imul   $0x66666667,%rbp,%rbp
  sar    $0x22,%rbp
  sub    %ebx,%ebp
  mov    $0x1,%ebx
L297:
  mov    %r12,%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  cmp    %ebx,%ebp
  jge    L297
L198:
  mov    0x4(%rsp),%eax
  jmp    L103
  cs nopw 0x0(%rax,%rax,1)
L308:
  lea    D35(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
L103:
  movslq %eax,%rbx
  cltd
  imul   $0x66666667,%rbx,%rbx
  sar    $0x22,%rbx
  sub    %edx,%ebx
  lea    (%rbx,%rbx,4),%edx
  add    %edx,%edx
  sub    %edx,%eax
  mov    %eax,0x4(%rsp)
  mov    %eax,%ebx
L121:
  test   %ebx,%ebx
  jle    L77
  cmp    $0x9,%ebx
  je     L83
  cmp    $0x4,%ebx
  jg     L254
  mov    $0x1,%ebp
  lea    D95(%rip),%r12
  je     L239
L74:
  mov    %r12,%rdi
  add    $0x1,%ebp
  call   <printf@plt>
  cmp    %ebx,%ebp
  jle    L74
L77:
  lea    D102(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L242
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L83:
  lea    D74(%rip),%rdi
  call   <printf@plt>
  jmp    L77
  xchg   %ax,%ax
L82:
  lea    D70(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  jmp    L103
  nopl   (%rax)
L118:
  lea    D187(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  jmp    L56
  nopl   (%rax)
L254:
  lea    D128(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  lea    -0x6(%rax),%edx
  cmp    $0x2,%edx
  ja     L77
  lea    -0x5(%rax),%ebp
  mov    $0x1,%ebx
  lea    D95(%rip),%r12
L181:
  mov    %r12,%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  cmp    %ebx,%ebp
  jge    L181
  jmp    L77
  nop
L175:
  lea    D24(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  lea    -0x258(%rax),%edx
  cmp    $0x12b,%edx
  ja     L56
  movslq %eax,%rbx
  sar    $0x1f,%eax
  mov    $0x1,%ebp
  lea    D18(%rip),%r12
  imul   $0x51eb851f,%rbx,%rbx
  sar    $0x25,%rbx
  sub    %eax,%ebx
  sub    $0x5,%ebx
L233:
  mov    %r12,%rdi
  add    $0x1,%ebp
  call   <printf@plt>
  cmp    %ebp,%ebx
  jge    L233
  jmp    L150
  nopl   0x0(%rax,%rax,1)
L80:
  lea    D36(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  lea    -0x3c(%rax),%edx
  cmp    $0x1d,%edx
  ja     L103
  movslq %eax,%rbx
  sar    $0x1f,%eax
  mov    $0x1,%ebp
  lea    D27(%rip),%r12
  imul   $0x66666667,%rbx,%rbx
  sar    $0x22,%rbx
  sub    %eax,%ebx
  sub    $0x5,%ebx
L208:
  mov    %r12,%rdi
  add    $0x1,%ebp
  call   <printf@plt>
  cmp    %ebp,%ebx
  jge    L208
  jmp    L198
  nopw   0x0(%rax,%rax,1)
L239:
  lea    D144(%rip),%rdi
  call   <printf@plt>
  jmp    L77
L242:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D28
type: string
name: disassemble_data
arguments: data_label: D133
type: string
name: disassemble_data
arguments: data_label: D84
type: string
name: disassemble_data
arguments: data_label: D111
type: string
name: disassemble_data
arguments: data_label: D18
type: string
name: disassemble_data
arguments: data_label: D142
type: string
name: disassemble_data
arguments: data_label: D27
type: string
name: disassemble_data
arguments: data_label: D35
type: string
name: disassemble_data
arguments: data_label: D95
type: string
name: disassemble_data
arguments: data_label: D102
type: string
name: disassemble_data
arguments: data_label: D74
type: string
name: disassemble_data
arguments: data_label: D70
type: string
name: disassemble_data
arguments: data_label: D187
type: string
name: disassemble_data
arguments: data_label: D128
type: string
name: disassemble_data
arguments: data_label: D24
type: string
name: disassemble_data
arguments: data_label: D36
type: string
name: disassemble_data
arguments: data_label: D144
type: string

tool: D28: Problem 10: Given n, print its resulting roman numeral equivalence.


tool: D133: Enter n: 

tool: D84: %d

tool: D111: The output is: 

tool: D18: C

tool: D142: CM

tool: D27: X

tool: D35: XC

tool: D95: I

tool: D102: 


tool: D74: IX

tool: D70: XL

tool: D187: CD

tool: D128: V

tool: D24: D

tool: D36: L

tool: D144: IV

assistant: ```c
void Problem10() {
  int n, temp, count = 1;
  double powe;
  printf("Problem 10: Given n, print its resulting roman numeral equivalence.\n");
  printf("Enter n: ");
  scanf("%d", &n);
  printf("The output is: ");
  if (n >= 100) {
    if (n / 100 == 9) {
      printf("CM");
    } else if (n / 100 >= 5) {
      printf("D");
      if (n / 100 > 5 && n / 100 < 9) {
        temp = n / 100 - 5;
        for (count = 1; count <= temp; count++) {
          printf("C");
        }
      }
    } else if (n / 100 == 4) {
      printf("CD");
    } else if (n / 100 >= 1) {
      temp = n / 100;
      for (count = 1; count <= temp; count++) {
        printf("C");
      }
    }
    n = n % 100;
  }
  if (n >= 10) {
    if (n / 10 == 9) {
      printf("XC");
    } else if (n / 10 >= 5) {
      printf("L");
      if (n / 10 > 5 && n / 10 < 9) {
        temp = n / 10 - 5;
        for (count = 1; count <= temp; count++) {
          printf("X");
        }
      }
    } else if (n / 10 == 4) {
      printf("XL");
    } else if (n / 10 >= 1) {
      temp = n / 10;
      for (count = 1; count <= temp; count++) {
        printf("X");
      }
    }
    n = n % 10;
  }
  if (n >= 1) {
    if (n == 9) {
      printf("IX");
    } else if (n >= 5) {
      printf("V");
      if (n > 5 && n < 9) {
        temp = n - 5;
        for (count = 1; count <= temp; count++) {
          printf("I");
        }
      }
    } else if (n == 4) {
      printf("IV");
    } else if (n >= 1) {
      temp = n;
      for (count = 1; count <= temp; count++) {
        printf("I");
      }
    }
  }
  printf("\n");
}
```