diff options
Diffstat (limited to 'c/0066/main.c')
| -rw-r--r-- | c/0066/main.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/c/0066/main.c b/c/0066/main.c new file mode 100644 index 0000000..b01eb8b --- /dev/null +++ b/c/0066/main.c @@ -0,0 +1,38 @@ +#include <stdlib.h> + +// begin + +/** + * Note: The returned array must be malloced, assume caller calls free(). + */ +int* plusOne(int* digits, int digitsSize, int* returnSize) { + int *buffer = malloc((digitsSize + 1) * sizeof(int)); + for (int i = 0; i < digitsSize; i++) { + buffer[i] = digits[digitsSize - 1 - i]; + } + buffer[0]++; + int carry = 0; + for (int i = 0; i < digitsSize; i++) { + int val = buffer[i] + carry; + carry = val / 10; + buffer[i] = val % 10; + } + int len = digitsSize; + if (carry) { + len++; + buffer[digitsSize] = 1; + } + int lp = 0, rp = len - 1; + while (lp <= rp) { + int t = buffer[lp]; + buffer[lp] = buffer[rp]; + buffer[rp] = t; + lp++; + rp--; + } + *returnSize = len; + return buffer; +} + +// end + |
