File tree Expand file tree Collapse file tree 4 files changed +93
-0
lines changed Expand file tree Collapse file tree 4 files changed +93
-0
lines changed Original file line number Diff line number Diff line change
1
+ all :
2
+ gcc -O2 -o test plus_one.c
Original file line number Diff line number Diff line change
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+ #include <string.h>
4
+
5
+ /**
6
+ ** Return an array of size *returnSize.
7
+ ** Note: The returned array must be malloced, assume caller calls free().
8
+ **/
9
+ static int * plusOne (int * digits , int digitsSize , int * returnSize )
10
+ {
11
+ int i , j , len = 0 , carry = 1 ;
12
+ int * result = malloc ((digitsSize + 1 ) * sizeof (int ));
13
+ for (i = digitsSize - 1 ; i >= 0 || carry ; i -- ) {
14
+ int n = digits [i ] + carry ;
15
+ result [len ++ ] = n % 10 ;
16
+ carry = n / 10 ;
17
+ }
18
+
19
+ for (i = 0 , j = len - 1 ; i < j ; i ++ , j -- ) {
20
+ int tmp = result [i ];
21
+ result [i ] = result [j ];
22
+ result [j ] = tmp ;
23
+ }
24
+
25
+ * returnSize = len ;
26
+ return result ;
27
+ }
28
+
29
+ int main (int argc , char * * argv )
30
+ {
31
+ if (argc != 2 ) {
32
+ fprintf (stderr , "Usage: ./test num\n" );
33
+ exit (-1 );
34
+ }
35
+
36
+ int i , count = strlen (argv [1 ]);
37
+ int * digits = malloc (count * sizeof (int ));
38
+ for (i = 0 ; i < count ; i ++ ) {
39
+ digits [i ] = argv [1 ][i ] - '0' ;
40
+ }
41
+
42
+ int len = 0 ;
43
+ int * res = plusOne (digits , count , & len );
44
+ for (i = 0 ; i < len ; i ++ ) {
45
+ printf ("%c" , res [i ] + '0' );
46
+ }
47
+ printf ("\n" );
48
+ return 0 ;
49
+ }
Original file line number Diff line number Diff line change
1
+ all :
2
+ gcc -O2 -o test add_binary.c
Original file line number Diff line number Diff line change
1
+ #include <stdio.h>
2
+ #include <stdlib.h>
3
+ #include <string.h>
4
+
5
+ static char * addBinary (char * a , char * b )
6
+ {
7
+ int len1 = strlen (a );
8
+ int len2 = strlen (b );
9
+ int len = len1 > len2 ? len1 + 1 : len2 + 1 ;
10
+ char * result = malloc (len + 1 );
11
+ result [len ] = '\0' ;
12
+ result [len - 1 ] = '\0' ;
13
+
14
+ int i , j , carry = 0 ;
15
+ len = 0 ;
16
+ for (i = len1 - 1 , j = len2 - 1 ; carry || i >= 0 || j >= 0 ; i -- , j -- ) {
17
+ int na = i >= 0 ? a [i ] - '0' : 0 ;
18
+ int nb = j >= 0 ? b [j ] - '0' : 0 ;
19
+ result [len ++ ] = (na ^ nb ^ carry ) + '0' ;
20
+ carry = carry + na + nb >= 2 ? 1 : 0 ;
21
+ }
22
+
23
+ for (i = 0 , j = len - 1 ; i < j ; i ++ , j -- ) {
24
+ char c = result [i ];
25
+ result [i ] = result [j ];
26
+ result [j ] = c ;
27
+ }
28
+
29
+ return result ;
30
+ }
31
+
32
+ int main (int argc , char * * argv )
33
+ {
34
+ if (argc != 3 ) {
35
+ fprintf (stderr , "Usage: ./test s1 s2\n" );
36
+ exit (-1 );
37
+ }
38
+ printf ("%s\n" , addBinary (argv [1 ], argv [2 ]));
39
+ return 0 ;
40
+ }
You can’t perform that action at this time.
0 commit comments