diff options
| author | Mistivia <i@mistivia.com> | 2025-09-03 16:32:07 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-09-03 16:32:07 +0800 |
| commit | 295795c04170e2b40317c5cad60af750e3911cb3 (patch) | |
| tree | ff21665ff6006b2990fc44e08d41e839b975228b | |
| parent | 156529ea783462cbf4006a4d267c278a52b2d71e (diff) | |
solve 66
| -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 + |
