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
|
#include <stdlib.h>
int conversion(char *nb)
{
int i;
for (i = 0; nb[i]; i++)
{
nb[i] -= '0';
if (nb[i] < 10)
{
my_putstr("Conversion ok!\n");
}
}
}
void putzero(int *nb, int size)
{
for (; size > 0; size--)
{
nb[size] = 0;
printf("Affectation de putzero :%d\n", nb[size]);
}
}
int add_carry(int *nb)
{
int pos;
for (pos = 0; nb[pos] >= 10; pos++)
{
nb[pos + 1] += nb[pos] / 10;
nb[pos] %= 10;
}
}
int *do_oplus(char *nb1, int len1, char *nb2, int len2)
{
int pos1;
int pos2;
int *res; // initialisation tab entier pour stocker les resultats
int i;
pos1 = len1 - 1; // curseur en derniere position
pos2 = len2 - 1;
res = malloc(sizeof (*res) * (len1 + len2)); // allocation de la memoire
putzero(res , len1 + len2); // affectation de 0000000 sur le resultat
for (i = 0; i < len1+len2; i++)
{
printf("%d",res[i]);
}
for (pos2 = len2 - 1; pos2 >= 0; pos2--)
{
for (pos1 = len1 - 1; pos1 >= 0; pos1--)
{
i = (len2 - pos2 - 1) + (len1 - pos1 - 1);
res[i] = nb1[pos1] + nb2[pos2];
printf("\nres[%d] = %d",i, res[i]);
}
}
add_carry(res + i);
return(res);
}
int addition(char *nb1, char *nb2)
{
int *res;
int len1;
int len2;
len1 = strlen(nb1);
len2 = strlen(nb2);
conversion(nb1);
conversion(nb2);
res = do_oplus(nb1, len1 , nb2, len2);
}
int main(int ac, char **av)
{
if ( ac != 3)
my_putstr("Bad usage of function\nFunction usage: ./a.out nb1 nb2");
else
printf("\nresultat de nb1 * nb2 = %d",(addition(av[1], av[2])));
} |
Partager