diff --git a/src/66.plus-one.c b/src/66.plus-one.c new file mode 100644 index 0000000..7b4f466 --- /dev/null +++ b/src/66.plus-one.c @@ -0,0 +1,96 @@ +/** 66. Plus One */ + +#include +#include +#include +#include + +int *plusOne(int *digits, int digitsSize, int *returnSize) { + int i = 0; + int *newDigits = calloc(digitsSize + 1, sizeof(int)); + for (i = 0; i < digitsSize; i++) { + newDigits[i+1] = digits[i]; + assert(newDigits[i+1] < 10 && newDigits[i+1] >= 0); + } + i = digitsSize; + do { + newDigits[i]++; + if (newDigits[i] == 10) { + newDigits[i] = 0; + i--; + } else { + break; + } + } while (i >= 0); + if (i == 0) { + *returnSize = digitsSize + 1; + } else { + newDigits++; + *returnSize = digitsSize; + } + return newDigits; +} + +bool equal(int *nums1, int *nums2, int len) { + for (int i = 0; i < len; i++) { + if (nums1[i] != nums2[i]) + return false; + } + return true; +} + +void printDigits(int *digits, int digitsSize) { + for (int i = 0; i < digitsSize; i++) { + printf("%d", digits[i]); + } + printf("\n"); +} + +void test_1() { + int nums[] = {1, 9}; + int expected[] = {2, 0}; + int len = 0; + int *result = plusOne(nums, 2, &len); + printDigits(result, len); + assert(len == 2); + assert(equal(result, expected, len)); +} + + +void test_2() { + int *nums = malloc(0 * sizeof(int)); + int expected[] = {1}; + int len = 0; + int *result = plusOne(nums, 0, &len); + printDigits(result, len); + assert(len == 1); + assert(equal(result, expected, len)); +} + +void test_3() { + int nums[] = {1, 9, 9}; + int expected[] = {2, 0, 0}; + int len = 0; + int *result = plusOne(nums, 3, &len); + printDigits(result, len); + assert(len == 3); + assert(equal(result, expected, len)); +} + +void test_4() { + int nums[] = {9}; + int expected[] = {1, 0}; + int len = 0; + int *result = plusOne(nums, 1, &len); + printDigits(result, len); + assert(len == 2); + assert(equal(result, expected, len)); +} + +int main() { + test_1(); + test_2(); + test_3(); + test_4(); + +}