#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, double *);
int main() {
  double N;
  int cont = 0;
  scanf("%lf", &N);
  printf("NOTAS:\n");
  while (N >= 100) {
    N = N - 100;
    cont++;
  }
  printf("%d nota(s) de R$ 100.00\n", cont);
  cont = 0;
  while (N >= 50) {
    N = N - 50;
    cont++;
  }
  printf("%d nota(s) de R$ 50.00\n", cont);
  cont = 0;
  while (N >= 20) {
    N = N - 20;
    cont++;
  }
  printf("%d nota(s) de R$ 20.00\n", cont);
  cont = 0;
  while (N >= 10) {
    N = N - 10;
    cont++;
  }
  printf("%d nota(s) de R$ 10.00\n", cont);
  cont = 0;
  while (N >= 5) {
    N = N - 5;
    cont++;
  }
  printf("%d nota(s) de R$ 5.00\n", cont);
  cont = 0;
  while (N >= 2) {
    N = N - 2;
    cont++;
  }
  printf("%d nota(s) de R$ 2.00\n", cont);
  cont = 0;
  printf("MOEDAS:\n");
  while (N >= 1) {
    N = N - 1;
    cont++;
  }
  printf("%d moeda(s) de R$ 1.00\n", cont);
  cont = 0;
  while (N >= 0.50) {
    N = N - 0.50;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.50\n", cont);
  cont = 0;
  while (N >= 0.25) {
    N = N - 0.25;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.25\n", cont);
  cont = 0;
  while (N >= 0.10) {
    N = N - 0.10;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.10\n", cont);
  cont = 0;
  while (N >= 0.05) {
    N = N - 0.05;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.05\n", cont);
  cont = 0;
  while (N >= 0.01) {
    N = N - 0.01;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.01\n", cont);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x14(%rbp)
lea    0xf23(%rip),%rdi
lea    -0x10(%rbp),%rsi
call   1040 <scanf@plt>
lea    0xf17(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x10(%rbp),%xmm0
movsd  0xe9f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     118f <main+0x6f>
movsd  -0x10(%rbp),%xmm0
movsd  0xe88(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1154 <main+0x34>
mov    -0x14(%rbp),%esi
lea    0xed3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xe54(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11e2 <main+0xc2>
movsd  -0x10(%rbp),%xmm0
movsd  0xe3d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11a7 <main+0x87>
mov    -0x14(%rbp),%esi
lea    0xe99(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xe09(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1235 <main+0x115>
movsd  -0x10(%rbp),%xmm0
movsd  0xdf2(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11fa <main+0xda>
mov    -0x14(%rbp),%esi
lea    0xe5e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xdbe(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1288 <main+0x168>
movsd  -0x10(%rbp),%xmm0
movsd  0xda7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    124d <main+0x12d>
mov    -0x14(%rbp),%esi
lea    0xe23(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xd73(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     12db <main+0x1bb>
movsd  -0x10(%rbp),%xmm0
movsd  0xd5c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12a0 <main+0x180>
mov    -0x14(%rbp),%esi
lea    0xde8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xd28(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     132e <main+0x20e>
movsd  -0x10(%rbp),%xmm0
movsd  0xd11(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12f3 <main+0x1d3>
mov    -0x14(%rbp),%esi
lea    0xdac(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
lea    0xdae(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movsd  -0x10(%rbp),%xmm0
movsd  0xccf(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     138f <main+0x26f>
movsd  -0x10(%rbp),%xmm0
movsd  0xcb8(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1354 <main+0x234>
mov    -0x14(%rbp),%esi
lea    0xd6b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xc84(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     13e2 <main+0x2c2>
movsd  -0x10(%rbp),%xmm0
movsd  0xc6d(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    13a7 <main+0x287>
mov    -0x14(%rbp),%esi
lea    0xd30(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xc39(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1435 <main+0x315>
movsd  -0x10(%rbp),%xmm0
movsd  0xc22(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    13fa <main+0x2da>
mov    -0x14(%rbp),%esi
lea    0xcf5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xbee(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1488 <main+0x368>
movsd  -0x10(%rbp),%xmm0
movsd  0xbd7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    144d <main+0x32d>
mov    -0x14(%rbp),%esi
lea    0xcba(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xba3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     14db <main+0x3bb>
movsd  -0x10(%rbp),%xmm0
movsd  0xb8c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    14a0 <main+0x380>
mov    -0x14(%rbp),%esi
lea    0xc7f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x0,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xb58(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     152e <main+0x40e>
movsd  -0x10(%rbp),%xmm0
movsd  0xb41(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    14f3 <main+0x3d3>
mov    -0x14(%rbp),%esi
lea    0xc44(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %rbx
push   %rax
lea    0xf86(%rip),%rdi
mov    %rsp,%rsi
call   1050 <scanf@plt>
lea    0x109a(%rip),%rdi
call   1030 <puts@plt>
movsd  (%rsp),%xmm0
xor    %ebp,%ebp
ucomisd 0xea3(%rip),%xmm0
mov    $0x0,%esi
jb     1192 <main+0x62>
xor    %esi,%esi
movsd  0xe9a(%rip),%xmm1
movsd  0xe8a(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%esi
ucomisd %xmm2,%xmm0
jae    1180 <main+0x50>
movsd  %xmm0,(%rsp)
lea    0xf2b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xe63(%rip),%xmm0
jb     11e2 <main+0xb2>
xor    %ebp,%ebp
movsd  0xe5f(%rip),%xmm1
movsd  0xe4f(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%ebp
ucomisd %xmm2,%xmm0
jae    11d0 <main+0xa0>
movsd  %xmm0,(%rsp)
lea    0xef4(%rip),%rdi
xor    %ebx,%ebx
mov    %ebp,%esi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xe1f(%rip),%xmm0
mov    $0x0,%esi
jb     1232 <main+0x102>
xor    %esi,%esi
movsd  0xe16(%rip),%xmm1
movsd  0xe06(%rip),%xmm2
nopw   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%esi
ucomisd %xmm2,%xmm0
jae    1220 <main+0xf0>
movsd  %xmm0,(%rsp)
lea    0xebc(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xde3(%rip),%xmm0
jb     1282 <main+0x152>
xor    %ebx,%ebx
movsd  0xddf(%rip),%xmm1
movsd  0xdcf(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%ebx
ucomisd %xmm2,%xmm0
jae    1270 <main+0x140>
movsd  %xmm0,(%rsp)
lea    0xe84(%rip),%rdi
xor    %ebp,%ebp
mov    %ebx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xd9f(%rip),%xmm0
mov    $0x0,%esi
jb     12d2 <main+0x1a2>
xor    %esi,%esi
movsd  0xd96(%rip),%xmm1
movsd  0xd86(%rip),%xmm2
nopw   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%esi
ucomisd %xmm2,%xmm0
jae    12c0 <main+0x190>
movsd  %xmm0,(%rsp)
lea    0xe4c(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xd63(%rip),%xmm0
jb     1322 <main+0x1f2>
xor    %ebp,%ebp
movsd  0xd5f(%rip),%xmm1
movsd  0xd4f(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%ebp
ucomisd %xmm2,%xmm0
jae    1310 <main+0x1e0>
movsd  %xmm0,(%rsp)
lea    0xe13(%rip),%rdi
xor    %ebx,%ebx
mov    %ebp,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0xeaf(%rip),%rdi
call   1030 <puts@plt>
movsd  (%rsp),%xmm0
ucomisd 0xd13(%rip),%xmm0
mov    $0x0,%esi
jb     1382 <main+0x252>
xor    %esi,%esi
movsd  0xd0a(%rip),%xmm1
movsd  0xcfa(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%esi
ucomisd %xmm2,%xmm0
jae    1370 <main+0x240>
movsd  %xmm0,(%rsp)
lea    0xdca(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xcd3(%rip),%xmm0
jb     13d2 <main+0x2a2>
xor    %ebx,%ebx
movsd  0xccf(%rip),%xmm1
movsd  0xcbf(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%ebx
ucomisd %xmm2,%xmm0
jae    13c0 <main+0x290>
movsd  %xmm0,(%rsp)
lea    0xd92(%rip),%rdi
xor    %ebp,%ebp
mov    %ebx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xc8f(%rip),%xmm0
mov    $0x0,%esi
jb     1422 <main+0x2f2>
xor    %esi,%esi
movsd  0xc86(%rip),%xmm1
movsd  0xc76(%rip),%xmm2
nopw   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%esi
ucomisd %xmm2,%xmm0
jae    1410 <main+0x2e0>
movsd  %xmm0,(%rsp)
lea    0xd5a(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xc53(%rip),%xmm0
jb     1472 <main+0x342>
xor    %ebp,%ebp
movsd  0xc4f(%rip),%xmm1
movsd  0xc3f(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%ebp
ucomisd %xmm2,%xmm0
jae    1460 <main+0x330>
movsd  %xmm0,(%rsp)
lea    0xd22(%rip),%rdi
xor    %ebx,%ebx
mov    %ebp,%esi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xc0f(%rip),%xmm0
mov    $0x0,%esi
jb     14c2 <main+0x392>
xor    %esi,%esi
movsd  0xc06(%rip),%xmm1
movsd  0xbf6(%rip),%xmm2
nopw   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%esi
ucomisd %xmm2,%xmm0
jae    14b0 <main+0x380>
movsd  %xmm0,(%rsp)
lea    0xcea(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
movsd  (%rsp),%xmm0
ucomisd 0xbd3(%rip),%xmm0
jb     1512 <main+0x3e2>
xor    %ebx,%ebx
movsd  0xbcf(%rip),%xmm1
movsd  0xbbf(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm0
add    $0x1,%ebx
ucomisd %xmm2,%xmm0
jae    1500 <main+0x3d0>
movsd  %xmm0,(%rsp)
lea    0xcb2(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
@.str = [4 x i8] c"%lf\00"
@.str.1 = [8 x i8] c"NOTAS:\0A\00"
@.str.2 = [25 x i8] c"%d nota(s) de R$ 100.00\0A\00"
@.str.3 = [24 x i8] c"%d nota(s) de R$ 50.00\0A\00"
@.str.4 = [24 x i8] c"%d nota(s) de R$ 20.00\0A\00"
@.str.5 = [24 x i8] c"%d nota(s) de R$ 10.00\0A\00"
@.str.6 = [23 x i8] c"%d nota(s) de R$ 5.00\0A\00"
@.str.7 = [23 x i8] c"%d nota(s) de R$ 2.00\0A\00"
@.str.8 = [9 x i8] c"MOEDAS:\0A\00"
@.str.9 = [24 x i8] c"%d moeda(s) de R$ 1.00\0A\00"
@.str.10 = [24 x i8] c"%d moeda(s) de R$ 0.50\0A\00"
@.str.11 = [24 x i8] c"%d moeda(s) de R$ 0.25\0A\00"
@.str.12 = [24 x i8] c"%d moeda(s) de R$ 0.10\0A\00"
@.str.13 = [24 x i8] c"%d moeda(s) de R$ 0.05\0A\00"
@.str.14 = [24 x i8] c"%d moeda(s) de R$ 0.01\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca double
%3 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %3
%4 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), double* %2)
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
br label %6
6: ; preds = %9, %0
%7 = load double, double* %2
%8 = fcmp oge double %7, 1.000000e+02
br i1 %8, label %9, label %14
9: ; preds = %6
%10 = load double, double* %2
%11 = fsub double %10, 1.000000e+02
store double %11, double* %2
%12 = load i32, i32* %3
%13 = add nsw i32 %12, 1
store i32 %13, i32* %3
br label %6
14: ; preds = %6
%15 = load i32, i32* %3
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.2, i64 0, i64 0), i32 %15)
store i32 0, i32* %3
br label %17
17: ; preds = %20, %14
%18 = load double, double* %2
%19 = fcmp oge double %18, 5.000000e+01
br i1 %19, label %20, label %25
20: ; preds = %17
%21 = load double, double* %2
%22 = fsub double %21, 5.000000e+01
store double %22, double* %2
%23 = load i32, i32* %3
%24 = add nsw i32 %23, 1
store i32 %24, i32* %3
br label %17
25: ; preds = %17
%26 = load i32, i32* %3
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.3, i64 0, i64 0), i32 %26)
store i32 0, i32* %3
br label %28
28: ; preds = %31, %25
%29 = load double, double* %2
%30 = fcmp oge double %29, 2.000000e+01
br i1 %30, label %31, label %36
31: ; preds = %28
%32 = load double, double* %2
%33 = fsub double %32, 2.000000e+01
store double %33, double* %2
%34 = load i32, i32* %3
%35 = add nsw i32 %34, 1
store i32 %35, i32* %3
br label %28
36: ; preds = %28
%37 = load i32, i32* %3
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.4, i64 0, i64 0), i32 %37)
store i32 0, i32* %3
br label %39
39: ; preds = %42, %36
%40 = load double, double* %2
%41 = fcmp oge double %40, 1.000000e+01
br i1 %41, label %42, label %47
42: ; preds = %39
%43 = load double, double* %2
%44 = fsub double %43, 1.000000e+01
store double %44, double* %2
%45 = load i32, i32* %3
%46 = add nsw i32 %45, 1
store i32 %46, i32* %3
br label %39
47: ; preds = %39
%48 = load i32, i32* %3
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.5, i64 0, i64 0), i32 %48)
store i32 0, i32* %3
br label %50
50: ; preds = %53, %47
%51 = load double, double* %2
%52 = fcmp oge double %51, 5.000000e+00
br i1 %52, label %53, label %58
53: ; preds = %50
%54 = load double, double* %2
%55 = fsub double %54, 5.000000e+00
store double %55, double* %2
%56 = load i32, i32* %3
%57 = add nsw i32 %56, 1
store i32 %57, i32* %3
br label %50
58: ; preds = %50
%59 = load i32, i32* %3
%60 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.6, i64 0, i64 0), i32 %59)
store i32 0, i32* %3
br label %61
61: ; preds = %64, %58
%62 = load double, double* %2
%63 = fcmp oge double %62, 2.000000e+00
br i1 %63, label %64, label %69
64: ; preds = %61
%65 = load double, double* %2
%66 = fsub double %65, 2.000000e+00
store double %66, double* %2
%67 = load i32, i32* %3
%68 = add nsw i32 %67, 1
store i32 %68, i32* %3
br label %61
69: ; preds = %61
%70 = load i32, i32* %3
%71 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.7, i64 0, i64 0), i32 %70)
store i32 0, i32* %3
%72 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
br label %73
73: ; preds = %76, %69
%74 = load double, double* %2
%75 = fcmp oge double %74, 1.000000e+00
br i1 %75, label %76, label %81
76: ; preds = %73
%77 = load double, double* %2
%78 = fsub double %77, 1.000000e+00
store double %78, double* %2
%79 = load i32, i32* %3
%80 = add nsw i32 %79, 1
store i32 %80, i32* %3
br label %73
81: ; preds = %73
%82 = load i32, i32* %3
%83 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0), i32 %82)
store i32 0, i32* %3
br label %84
84: ; preds = %87, %81
%85 = load double, double* %2
%86 = fcmp oge double %85, 5.000000e-01
br i1 %86, label %87, label %92
87: ; preds = %84
%88 = load double, double* %2
%89 = fsub double %88, 5.000000e-01
store double %89, double* %2
%90 = load i32, i32* %3
%91 = add nsw i32 %90, 1
store i32 %91, i32* %3
br label %84
92: ; preds = %84
%93 = load i32, i32* %3
%94 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.10, i64 0, i64 0), i32 %93)
store i32 0, i32* %3
br label %95
95: ; preds = %98, %92
%96 = load double, double* %2
%97 = fcmp oge double %96, 2.500000e-01
br i1 %97, label %98, label %103
98: ; preds = %95
%99 = load double, double* %2
%100 = fsub double %99, 2.500000e-01
store double %100, double* %2
%101 = load i32, i32* %3
%102 = add nsw i32 %101, 1
store i32 %102, i32* %3
br label %95
103: ; preds = %95
%104 = load i32, i32* %3
%105 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0), i32 %104)
store i32 0, i32* %3
br label %106
106: ; preds = %109, %103
%107 = load double, double* %2
%108 = fcmp oge double %107, 1.000000e-01
br i1 %108, label %109, label %114
109: ; preds = %106
%110 = load double, double* %2
%111 = fsub double %110, 1.000000e-01
store double %111, double* %2
%112 = load i32, i32* %3
%113 = add nsw i32 %112, 1
store i32 %113, i32* %3
br label %106
114: ; preds = %106
%115 = load i32, i32* %3
%116 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.12, i64 0, i64 0), i32 %115)
store i32 0, i32* %3
br label %117
117: ; preds = %120, %114
%118 = load double, double* %2
%119 = fcmp oge double %118, 5.000000e-02
br i1 %119, label %120, label %125
120: ; preds = %117
%121 = load double, double* %2
%122 = fsub double %121, 5.000000e-02
store double %122, double* %2
%123 = load i32, i32* %3
%124 = add nsw i32 %123, 1
store i32 %124, i32* %3
br label %117
125: ; preds = %117
%126 = load i32, i32* %3
%127 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.13, i64 0, i64 0), i32 %126)
store i32 0, i32* %3
br label %128
128: ; preds = %131, %125
%129 = load double, double* %2
%130 = fcmp oge double %129, 1.000000e-02
br i1 %130, label %131, label %136
131: ; preds = %128
%132 = load double, double* %2
%133 = fsub double %132, 1.000000e-02
store double %133, double* %2
%134 = load i32, i32* %3
%135 = add nsw i32 %134, 1
store i32 %135, i32* %3
br label %128
136: ; preds = %128
%137 = load i32, i32* %3
%138 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i64 0, i64 0), i32 %137)
ret i32 0
}

LLVM IR (-O2):
@.str = [4 x i8] c"%lf\00"
@.str.2 = [25 x i8] c"%d nota(s) de R$ 100.00\0A\00"
@.str.3 = [24 x i8] c"%d nota(s) de R$ 50.00\0A\00"
@.str.4 = [24 x i8] c"%d nota(s) de R$ 20.00\0A\00"
@.str.5 = [24 x i8] c"%d nota(s) de R$ 10.00\0A\00"
@.str.6 = [23 x i8] c"%d nota(s) de R$ 5.00\0A\00"
@.str.7 = [23 x i8] c"%d nota(s) de R$ 2.00\0A\00"
@.str.9 = [24 x i8] c"%d moeda(s) de R$ 1.00\0A\00"
@.str.10 = [24 x i8] c"%d moeda(s) de R$ 0.50\0A\00"
@.str.11 = [24 x i8] c"%d moeda(s) de R$ 0.25\0A\00"
@.str.12 = [24 x i8] c"%d moeda(s) de R$ 0.10\0A\00"
@.str.13 = [24 x i8] c"%d moeda(s) de R$ 0.05\0A\00"
@.str.14 = [24 x i8] c"%d moeda(s) de R$ 0.01\0A\00"
@str = [7 x i8] c"NOTAS:\00"
@str.15 = [8 x i8] c"MOEDAS:\00"
define i32 @main() {
%1 = alloca double
%2 = bitcast double* %1 to i8*
%3 = call i32 @scanf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), double* %1)
%4 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str, i64 0, i64 0))
%5 = load double, double* %1
%6 = fcmp ult double %5, 1.000000e+02
br i1 %6, label %14, label %7
7: ; preds = %0, %7
%8 = phi i32 [ %11, %7 ], [ 0, %0 ]
%9 = phi double [ %10, %7 ], [ %5, %0 ]
%10 = fadd double %9, -1.000000e+02
%11 = add nuw nsw i32 %8, 1
%12 = fcmp ult double %10, 1.000000e+02
br i1 %12, label %13, label %7
13: ; preds = %7
store double %10, double* %1
br label %14
14: ; preds = %13, %0
%15 = phi i32 [ %11, %13 ], [ 0, %0 ]
%16 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.2, i64 0, i64 0), i32 %15)
%17 = load double, double* %1
%18 = fcmp ult double %17, 5.000000e+01
br i1 %18, label %26, label %19
19: ; preds = %14, %19
%20 = phi i32 [ %23, %19 ], [ 0, %14 ]
%21 = phi double [ %22, %19 ], [ %17, %14 ]
%22 = fadd double %21, -5.000000e+01
%23 = add nuw nsw i32 %20, 1
%24 = fcmp ult double %22, 5.000000e+01
br i1 %24, label %25, label %19
25: ; preds = %19
store double %22, double* %1
br label %26
26: ; preds = %25, %14
%27 = phi i32 [ %23, %25 ], [ 0, %14 ]
%28 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.3, i64 0, i64 0), i32 %27)
%29 = load double, double* %1
%30 = fcmp ult double %29, 2.000000e+01
br i1 %30, label %38, label %31
31: ; preds = %26, %31
%32 = phi i32 [ %35, %31 ], [ 0, %26 ]
%33 = phi double [ %34, %31 ], [ %29, %26 ]
%34 = fadd double %33, -2.000000e+01
%35 = add nuw nsw i32 %32, 1
%36 = fcmp ult double %34, 2.000000e+01
br i1 %36, label %37, label %31
37: ; preds = %31
store double %34, double* %1
br label %38
38: ; preds = %37, %26
%39 = phi i32 [ %35, %37 ], [ 0, %26 ]
%40 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.4, i64 0, i64 0), i32 %39)
%41 = load double, double* %1
%42 = fcmp ult double %41, 1.000000e+01
br i1 %42, label %50, label %43
43: ; preds = %38, %43
%44 = phi i32 [ %47, %43 ], [ 0, %38 ]
%45 = phi double [ %46, %43 ], [ %41, %38 ]
%46 = fadd double %45, -1.000000e+01
%47 = add nuw nsw i32 %44, 1
%48 = fcmp ult double %46, 1.000000e+01
br i1 %48, label %49, label %43
49: ; preds = %43
store double %46, double* %1
br label %50
50: ; preds = %49, %38
%51 = phi i32 [ %47, %49 ], [ 0, %38 ]
%52 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.5, i64 0, i64 0), i32 %51)
%53 = load double, double* %1
%54 = fcmp ult double %53, 5.000000e+00
br i1 %54, label %62, label %55
55: ; preds = %50, %55
%56 = phi i32 [ %59, %55 ], [ 0, %50 ]
%57 = phi double [ %58, %55 ], [ %53, %50 ]
%58 = fadd double %57, -5.000000e+00
%59 = add nuw nsw i32 %56, 1
%60 = fcmp ult double %58, 5.000000e+00
br i1 %60, label %61, label %55
61: ; preds = %55
store double %58, double* %1
br label %62
62: ; preds = %61, %50
%63 = phi i32 [ %59, %61 ], [ 0, %50 ]
%64 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.6, i64 0, i64 0), i32 %63)
%65 = load double, double* %1
%66 = fcmp ult double %65, 2.000000e+00
br i1 %66, label %74, label %67
67: ; preds = %62, %67
%68 = phi i32 [ %71, %67 ], [ 0, %62 ]
%69 = phi double [ %70, %67 ], [ %65, %62 ]
%70 = fadd double %69, -2.000000e+00
%71 = add nuw nsw i32 %68, 1
%72 = fcmp ult double %70, 2.000000e+00
br i1 %72, label %73, label %67
73: ; preds = %67
store double %70, double* %1
br label %74
74: ; preds = %73, %62
%75 = phi i32 [ %71, %73 ], [ 0, %62 ]
%76 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @.str.7, i64 0, i64 0), i32 %75)
%77 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @str.15, i64 0, i64 0))
%78 = load double, double* %1
%79 = fcmp ult double %78, 1.000000e+00
br i1 %79, label %87, label %80
80: ; preds = %74, %80
%81 = phi i32 [ %84, %80 ], [ 0, %74 ]
%82 = phi double [ %83, %80 ], [ %78, %74 ]
%83 = fadd double %82, -1.000000e+00
%84 = add nuw nsw i32 %81, 1
%85 = fcmp ult double %83, 1.000000e+00
br i1 %85, label %86, label %80
86: ; preds = %80
store double %83, double* %1
br label %87
87: ; preds = %86, %74
%88 = phi i32 [ %84, %86 ], [ 0, %74 ]
%89 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.9, i64 0, i64 0), i32 %88)
%90 = load double, double* %1
%91 = fcmp ult double %90, 5.000000e-01
br i1 %91, label %99, label %92
92: ; preds = %87, %92
%93 = phi i32 [ %96, %92 ], [ 0, %87 ]
%94 = phi double [ %95, %92 ], [ %90, %87 ]
%95 = fadd double %94, -5.000000e-01
%96 = add nuw nsw i32 %93, 1
%97 = fcmp ult double %95, 5.000000e-01
br i1 %97, label %98, label %92
98: ; preds = %92
store double %95, double* %1
br label %99
99: ; preds = %98, %87
%100 = phi i32 [ %96, %98 ], [ 0, %87 ]
%101 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.10, i64 0, i64 0), i32 %100)
%102 = load double, double* %1
%103 = fcmp ult double %102, 2.500000e-01
br i1 %103, label %111, label %104
104: ; preds = %99, %104
%105 = phi i32 [ %108, %104 ], [ 0, %99 ]
%106 = phi double [ %107, %104 ], [ %102, %99 ]
%107 = fadd double %106, -2.500000e-01
%108 = add nuw nsw i32 %105, 1
%109 = fcmp ult double %107, 2.500000e-01
br i1 %109, label %110, label %104
110: ; preds = %104
store double %107, double* %1
br label %111
111: ; preds = %110, %99
%112 = phi i32 [ %108, %110 ], [ 0, %99 ]
%113 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.11, i64 0, i64 0), i32 %112)
%114 = load double, double* %1
%115 = fcmp ult double %114, 1.000000e-01
br i1 %115, label %123, label %116
116: ; preds = %111, %116
%117 = phi i32 [ %120, %116 ], [ 0, %111 ]
%118 = phi double [ %119, %116 ], [ %114, %111 ]
%119 = fadd double %118, -1.000000e-01
%120 = add nuw nsw i32 %117, 1
%121 = fcmp ult double %119, 1.000000e-01
br i1 %121, label %122, label %116
122: ; preds = %116
store double %119, double* %1
br label %123
123: ; preds = %122, %111
%124 = phi i32 [ %120, %122 ], [ 0, %111 ]
%125 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.12, i64 0, i64 0), i32 %124)
%126 = load double, double* %1
%127 = fcmp ult double %126, 5.000000e-02
br i1 %127, label %135, label %128
128: ; preds = %123, %128
%129 = phi i32 [ %132, %128 ], [ 0, %123 ]
%130 = phi double [ %131, %128 ], [ %126, %123 ]
%131 = fadd double %130, -5.000000e-02
%132 = add nuw nsw i32 %129, 1
%133 = fcmp ult double %131, 5.000000e-02
br i1 %133, label %134, label %128
134: ; preds = %128
store double %131, double* %1
br label %135
135: ; preds = %134, %123
%136 = phi i32 [ %132, %134 ], [ 0, %123 ]
%137 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.13, i64 0, i64 0), i32 %136)
%138 = load double, double* %1
%139 = fcmp ult double %138, 1.000000e-02
br i1 %139, label %147, label %140
140: ; preds = %135, %140
%141 = phi i32 [ %144, %140 ], [ 0, %135 ]
%142 = phi double [ %143, %140 ], [ %138, %135 ]
%143 = fadd double %142, -1.000000e-02
%144 = add nuw nsw i32 %141, 1
%145 = fcmp ult double %143, 1.000000e-02
br i1 %145, label %146, label %140
146: ; preds = %140
store double %143, double* %1
br label %147
147: ; preds = %146, %135
%148 = phi i32 [ %144, %146 ], [ 0, %135 ]
%149 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i64 0, i64 0), i32 %148)
ret i32 0
}