-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprint_int_b.c
106 lines (98 loc) · 1.45 KB
/
print_int_b.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include "main.h"
int call(va_list va, char *buffer, char *nil, int n_digit,
int i, int r);
/**
* print_address - function to
* print hexadecimal value
* @va: argumant value
* Return: integer
*/
int print_address(va_list va)
{
intptr_t addr = (intptr_t) va_arg(va, void *);
int n_digit = 0, i = 0, r = 0;
char buffer[100];
char *nil = "(nil)";
if (!addr)
{
while (*(nil + i))
{
_putchar(*(nil + i));
i++;
}
return (i);
}
while (1)
{
r = addr % 16;
if (r < 10)
buffer[i] = '0' + r;
else
buffer[i] = 'a' + (r - 10);
addr /= 16;
if (addr == 0)
break;
i++;
}
_putchar('0');
_putchar('x');
n_digit += 2;
while (i >= 0)
{
if (*(buffer + i) != '0')
{
while (i >= 0)
{
n_digit++;
_putchar(*(buffer + i));
i--;
}
}
i--;
}
return (n_digit);
}
/**
* print_unsigned_bin - print unsigned int in binary
* @va: arguments
* Return: number characters printed
*/
int print_unsigned_bin(va_list va)
{
char buffer[1024];
unsigned int n = va_arg(va, unsigned int);
int n_digit = 0, i = 0;
while (i < 1024)
{
buffer[i] = '0' + (n % 2);
n -= (n % 2);
n /= 2;
if (n == 0)
break;
i++;
}
while (i >= 0)
{
_putchar(*(buffer + i));
n_digit++;
i--;
}
return (n_digit);
}
/**
* n_u_digit - number of digits inside
* @n: number
* Return: an integer value
*/
int n_u_digit(unsigned int n)
{
int i = 0;
if (n == 0)
return (1);
while (n > 0)
{
n /= 10;
i++;
}
return (i);
}