Skip to content

Commit bf80bac

Browse files
Updated 103-infinite_add.c
1 parent 9823b33 commit bf80bac

File tree

1 file changed

+64
-47
lines changed

1 file changed

+64
-47
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,78 @@
11
#include "main.h"
22

33
/**
4-
* infinite_add - adds two numbers
5-
*
6-
* @n1: first number
7-
* @n2: second number
8-
* @r: buffer for result
9-
* @size_r: buffer size
10-
*
11-
* Return: address of r or 0
4+
* rev_string - reverse array
5+
* @n: integer params
6+
* Return: 0
127
*/
138

14-
char *infinite_add(char *n1, char *n2, char *r, int size_r)
9+
void rev_string(char *n)
1510
{
16-
int i, j, k, l, m, n;
17-
for (i = 0; n1[i]; i++)
18-
;
19-
20-
for (j = 0; n2[j]; j++)
21-
;
22-
23-
if (i > size_r || j > size_r)
24-
return (0);
25-
26-
m = 0;
27-
28-
for (i -= 1, j -= 1, k = 0; k < size_r - 1; i--, j--, k++)
11+
int i = 0;
12+
int j = 0;
13+
char temp;
14+
15+
while (*(n + i) != '\0')
2916
{
30-
n = m;
31-
32-
if (i >= 0)
33-
n += n1[i] - '0';
34-
35-
if (j >= 0)
36-
n += n2[j] - '0';
37-
38-
if (i < 0 && j < 0 && n == 0)
39-
{
40-
break;
41-
}
42-
43-
m = n / 10;
44-
r[k] = n % 10 + '0';
45-
17+
i++;
4618
}
47-
48-
r[k] = '\0';
49-
50-
if (i >= 0 || j >= 0 || m)
51-
return (0);
19+
i--;
5220

53-
for (k -= 1, l = 0; l < k; k--, l++)
21+
for (j = 0; j < i; j++, i--)
5422
{
55-
m = r[k];
56-
r[k] = r[l];
57-
r[l] = m;
23+
temp = *(n + j);
24+
*(n + j) = *(n + i);
25+
*(n + i) = temp;
5826
}
27+
}
5928

29+
/**
30+
* infinite_add - add 2 numbers together
31+
* @n1: text representation of 1st number to add
32+
* @n2: text representation of 2nd number to add
33+
* @r: pointer to buffer
34+
* @size_r: buffer size
35+
* Return: pointer to calling function
36+
*/
37+
38+
char *infinite_add(char *n1, char *n2, char *r, int size_r)
39+
{
40+
int overflow = 0, i = 0, j = 0, digits = 0;
41+
int val1 = 0, val2 = 0, temp_tot = 0;
42+
43+
while (*(n1 + i) != '\0')
44+
i++;
45+
while (*(n2 + j) != '\0')
46+
j++;
47+
i--;
48+
j--;
49+
if (j >= size_r || i >= size_r)
50+
return (0);
51+
while (j >= 0 || i >= 0 || overflow == 1)
52+
{
53+
if (i < 0)
54+
val1 = 0;
55+
else
56+
val1 = *(n1 + i) - '0';
57+
if (j < 0)
58+
val2 = 0;
59+
else
60+
val2 = *(n2 + j) - '0';
61+
temp_tot = val1 + val2 + overflow;
62+
if (temp_tot >= 10)
63+
overflow = 1;
64+
else
65+
overflow = 0;
66+
if (digits >= (size_r - 1))
67+
return (0);
68+
*(r + digits) = (temp_tot % 10) + '0';
69+
digits++;
70+
j--;
71+
i--;
72+
}
73+
if (digits == size_r)
74+
return (0);
75+
*(r + digits) = '\0';
76+
rev_string(r);
6077
return (r);
6178
}

0 commit comments

Comments
 (0)