Pilnie potrzebuję pomocy z tym kodem. Nie wiem jak poprawić błędy, program źle dodaje. Bardzo proszę o pomoc :(
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int len(int x){
int l = 0, i = x;
while (i>0){
i /= 10;
l++;
}
return l;
}
int* num_to_arr (int x){
int* arr = (int*) malloc(len(x) * sizeof(int));
int i = len(x)-1;
while (i>=0){
arr[i] = x%10;
x /= 10;
i--;
}
return arr;
}
int main (void){
int a, b, i;
printf("a = ");
scanf("%d", &a);
printf("b = ");
scanf("%d", &b);
int* A = num_to_arr(a);
int* B = num_to_arr(b);
int difa=0, difb=0;
if (len(a)>=len(b)){
difb = len(a) - len(b);
}
else {
difa = len(b) - len(a);
}
int lena = len(a), lenb = len(b), one=0;
int lenc = (lena>lenb) ? lena : lenb;
int O[lenc-1];
for (i=lenc-1; i>=0; i--){
if (lena < 0 || lenb < 0){
one = 0;
O[i] = 0;
}
else if (A[lena-1] + B[lenb-1] > 9){
one = 1;
O[i] = 1;
}
else {
one = 0;
O[i] = 0;
}
lena--;
lenb--;
}
int c = a + b;
int* C = num_to_arr(c);
char spaceone[lenc-1];
for (i=0; i<lenc; i++){
if (O[i] == 0){
spaceone[i] = 32;
}
else {
spaceone[i] = 49;
}
}
printf("%s", spaceone);
// for (i=0; i<lenc; i++){
// printf("%d", O[i]);
// }
printf("\n");
for(i=0; i<=difa; i++){
printf(" ");
}
for (i=0; i<len(a); i++){
printf("%d", A[i]);
}
printf("\n+");
for(i=0; i<difb; i++){
printf(" ");
}
for (i=0; i<len(b); i++){
printf("%d", B[i]);
}
printf("\n ");
for (i=0; i<lenc; i++){
printf("-");
}
printf("\n");
if (one == 1){
printf("%d", one);
}
else{
printf(" ");
}
for (i=0; i<lenc; i++){
printf("%d", C[i]);
}
free(A);
free(B);
return 0;
}