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

```asm
<Problem10>:
  endbr64
  push   %r12
  lea    D158(%rip),%rdi
  push   %rbp
  push   %rbx
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    D179(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D193(%rip),%rdi
  call   <scanf@plt>
  lea    D82(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%ebx
  cmp    $0x63,%ebx
  jle    L80
  lea    -0x384(%rbx),%eax
  cmp    $0x63,%eax
  jbe    L161
  cmp    $0x1f3,%ebx
  jg     L48
  lea    -0x190(%rbx),%eax
  cmp    $0x63,%eax
  jbe    L174
  movslq %ebx,%rbp
  sar    $0x1f,%ebx
  lea    D156(%rip),%r12
  imul   $0x51eb851f,%rbp,%rbp
  sar    $0x25,%rbp
  sub    %ebx,%ebp
  mov    $0x1,%ebx
L153:
  mov    %r12,%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  cmp    %ebx,%ebp
  jge    L153
L238:
  mov    0x4(%rsp),%eax
  jmp    L25
  nopl   0x0(%rax,%rax,1)
L161:
  lea    D73(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
L25:
  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
L80:
  cmp    $0x9,%ebx
  jle    L250
  lea    -0x5a(%rbx),%eax
  cmp    $0x9,%eax
  jbe    L220
  cmp    $0x31,%ebx
  jg     L246
  lea    -0x28(%rbx),%eax
  cmp    $0x9,%eax
  jbe    L9
  movslq %ebx,%rbp
  sar    $0x1f,%ebx
  lea    D127(%rip),%r12
  imul   $0x66666667,%rbp,%rbp
  sar    $0x22,%rbp
  sub    %ebx,%ebp
  mov    $0x1,%ebx
L7:
  mov    %r12,%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  cmp    %ebx,%ebp
  jge    L7
L149:
  mov    0x4(%rsp),%eax
  jmp    L16
  cs nopw 0x0(%rax,%rax,1)
L220:
  lea    D90(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
L16:
  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
L250:
  test   %ebx,%ebx
  jle    L14
  cmp    $0x9,%ebx
  je     L290
  cmp    $0x4,%ebx
  jg     L29
  mov    $0x1,%ebp
  lea    D155(%rip),%r12
  je     L206
L38:
  mov    %r12,%rdi
  add    $0x1,%ebp
  call   <printf@plt>
  cmp    %ebx,%ebp
  jle    L38
L14:
  lea    D194(%rip),%rdi
  call   <printf@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L234
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopw   0x0(%rax,%rax,1)
L290:
  lea    D76(%rip),%rdi
  call   <printf@plt>
  jmp    L14
  xchg   %ax,%ax
L9:
  lea    D136(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  jmp    L16
  nopl   (%rax)
L174:
  lea    D172(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  jmp    L25
  nopl   (%rax)
L29:
  lea    D16(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  lea    -0x6(%rax),%edx
  cmp    $0x2,%edx
  ja     L14
  lea    -0x5(%rax),%ebp
  mov    $0x1,%ebx
  lea    D155(%rip),%r12
L178:
  mov    %r12,%rdi
  add    $0x1,%ebx
  call   <printf@plt>
  cmp    %ebx,%ebp
  jge    L178
  jmp    L14
  nop
L48:
  lea    D6(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  lea    -0x258(%rax),%edx
  cmp    $0x12b,%edx
  ja     L25
  movslq %eax,%rbx
  sar    $0x1f,%eax
  mov    $0x1,%ebp
  lea    D156(%rip),%r12
  imul   $0x51eb851f,%rbx,%rbx
  sar    $0x25,%rbx
  sub    %eax,%ebx
  sub    $0x5,%ebx
L240:
  mov    %r12,%rdi
  add    $0x1,%ebp
  call   <printf@plt>
  cmp    %ebp,%ebx
  jge    L240
  jmp    L238
  nopl   0x0(%rax,%rax,1)
L246:
  lea    D34(%rip),%rdi
  call   <printf@plt>
  mov    0x4(%rsp),%eax
  lea    -0x3c(%rax),%edx
  cmp    $0x1d,%edx
  ja     L16
  movslq %eax,%rbx
  sar    $0x1f,%eax
  mov    $0x1,%ebp
  lea    D127(%rip),%r12
  imul   $0x66666667,%rbx,%rbx
  sar    $0x22,%rbx
  sub    %eax,%ebx
  sub    $0x5,%ebx
L307:
  mov    %r12,%rdi
  add    $0x1,%ebp
  call   <printf@plt>
  cmp    %ebp,%ebx
  jge    L307
  jmp    L149
  nopw   0x0(%rax,%rax,1)
L206:
  lea    D192(%rip),%rdi
  call   <printf@plt>
  jmp    L14
L234:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D158
type_infered: string
name: disassemble_data
arguments: data_label: D179
type_infered: string
name: disassemble_data
arguments: data_label: D193
type_infered: string
name: disassemble_data
arguments: data_label: D82
type_infered: string
name: disassemble_data
arguments: data_label: D156
type_infered: string
name: disassemble_data
arguments: data_label: D73
type_infered: string
name: disassemble_data
arguments: data_label: D127
type_infered: string
name: disassemble_data
arguments: data_label: D90
type_infered: string
name: disassemble_data
arguments: data_label: D155
type_infered: string
name: disassemble_data
arguments: data_label: D194
type_infered: string
name: disassemble_data
arguments: data_label: D76
type_infered: string
name: disassemble_data
arguments: data_label: D136
type_infered: string
name: disassemble_data
arguments: data_label: D172
type_infered: string
name: disassemble_data
arguments: data_label: D16
type_infered: string
name: disassemble_data
arguments: data_label: D6
type_infered: string
name: disassemble_data
arguments: data_label: D34
type_infered: string
name: disassemble_data
arguments: data_label: D192
type_infered: string

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


tool: D179: Enter n: 

tool: D193: %d

tool: D82: The output is: 

tool: D156: C

tool: D73: CM

tool: D127: X

tool: D90: XC

tool: D155: I

tool: D194: 


tool: D76: IX

tool: D136: XL

tool: D172: CD

tool: D16: V

tool: D6: D

tool: D34: L

tool: D192: 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");
}
```