#include <stdio.h>
#include <stdlib.h>
int* incrementByOne(int* digits, int size, int* newSize) {
int carry = 1;
for (int i = size - 1; i >= 0; i--) {
digits[i] += carry;
if (digits[i] == 10) {
digits[i] = 0;
carry = 1;
} else {
carry = 0;
break;
}
}
if (carry == 1) {
// Allocate a new array with one extra digit
int* newDigits = (int*)malloc((size + 1) * sizeof(int));
newDigits[0] = 1;
for (int i = 0; i < size; i++) {
newDigits[i + 1] = digits[i];
}
free(digits); // Free old array
*newSize = size + 1;
return newDigits;
}
*newSize = size;
return digits;
}
int main() {
int size = 3;
int* digits = (int*)malloc(size * sizeof(int));
digits[0] = 9;
digits[1] = 9;
digits[2] = 9;
int newSize;
digits = incrementByOne(digits, size, &newSize);
printf("Result: ");
for (int i = 0; i < newSize; i++) {
printf("%d ", digits[i]);
}
printf("\n");
free(digits);
return 0;
}
/*
run:
Result: 1 0 0 0
*/