Solve 66. Plus One

This commit is contained in:
Samuel Ortion 2025-03-02 21:00:03 +01:00
parent eabc14e3e5
commit 6f12b214ee
Signed by: sortion
GPG Key ID: 9B02406F8C4FB765
1 changed files with 96 additions and 0 deletions

96
src/66.plus-one.c Normal file
View File

@ -0,0 +1,96 @@
/** 66. Plus One */
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
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();
}