1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#include <stdlib.h>
void conversion(char *nb)
{
int i;
i = 0;
while (nb[i] != '\0')
{
nb[i] -= '0';
printf("Conversion ok!\n");
i++;
}
}
void putzero(int *nb, int size)
{
for(; size > 0; size--)
{
nb[size] = 0;
printf("Affectation de putzero :%d\n", nb[size]);
}
}
int *calcul(char *nb1, int len1, char *nb2, int len2)
{
int pos1;
int pos2;
int pos_res;
int *res;
res = malloc(sizeof(*res) * (len1 + len2));
pos_res = 0;
putzero(res, len1+len2);
pos1 = len1 - 1;
pos2 = len2 - 1;
while (pos2 >= 0 || pos1 >= 0)
{
res[pos_res] = nb1[pos1] + nb2[pos2];
printf("res[%d] = nb[%d] + nb[%d]\n", pos_res, pos1, pos2);
printf("res[%d] = %d\n", pos_res, res[pos_res]);
pos1--;
pos2--;
pos_res++;
}
pos_res = 0;
while (res[pos_res] >= 10)
{
res[pos_res + 1] += res[pos_res] / 10;
res[pos_res] %= 10;
printf("nouveau resultat de res[%d] = %d\n", pos_res, res[pos_res]);
pos_res++;
}
printf("resultat pos_final de res[%d] = %d\n", pos_res, res[pos_res]);
}
char *inverse(int *nb, int len)
{
char *res;
int pos;
pos = 0;
res = malloc(sizeof (*res) * len + 1);
while (pos < len)
{
res[pos] = nb[pos] + '0';
pos++;
}
res[pos] = '\0';
my_revstr(res);
my_putstr(res);
return(res);
}
char *addition(char *nb1, char *nb2)
{
int i;
int len1;
int len2;
int *res;
char *res_i;
i = 0;
len1 = strlen(nb1);
len2 = strlen(nb2);
conversion(nb1);
conversion(nb2);
res = calcul(nb1, len1, nb2, len2);
res_i = inverse(res, len1+len2);
free(res);
}
int main(int ac, char **av)
{
if (ac != 3)
my_putstr("bad usage of function\n");
else
addition(av[1], av[2]);
} |