Witam,
Na wstępie chciałbym ostrzec, że pierwszy raz szukam pomocy na forum w takiej sprawie, dlatego mogę popełnić jakieś głupie błędy. Chciałbym poprosić o zerknięcie na mój kod w C (standart C99). Moim zadaniem do wykonania jest opracowanie funkcji obliczających iloczyn dwóch liczb zapisanych w tablicach i następnie wykorzystać je w programie do obliczenia 100! i 1000!. Oto kod:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int* dotablicy(int x, int* licznik2)
{
int licznik = 1;
int d = 0;
int y = x;
int potega = 0;
while (y>0)
{
potega = pow(10,licznik);
d = (y % potega);
y -= d;
licznik++;
}
int *wynik;
wynik = (int *)malloc(licznik*sizeof(int));
licznik = 1;
while (x>0)
{
potega = pow(10,licznik);
d = x % potega;
x -= d;
d /=pow(10,licznik-1);
wynik[licznik-1] = d;
licznik++;
}
wynik[licznik-1] = -1;
licznik -=2;
*licznik2 = licznik;
return wynik;
}
int* mnozenie(const int x[],int y[])
{
int licznik3 = 0;
for (int i = 0; x[i]>=0; ++i)
licznik3++;
int xrozmiar = licznik3;
licznik3 = 0;
for (int i = 0; y[i]>=0; ++i)
licznik3++;
int yrozmiar = licznik3;
int *wynik;
wynik = (int *)malloc((xrozmiar+yrozmiar)*sizeof(int));
for (int i = 0; i <= (xrozmiar+yrozmiar); ++i)
{
wynik[i] = 0;
//printf("%d\n",wynik[i] );
}
if (xrozmiar > yrozmiar)
{
for (int i = 0; x[i]>= 0; ++i)
for (int j = 0; y[j] >= 0; ++j)
wynik[j+i] += x[i]*y[j];
}
else
{
for (int i = 0; y[i] >= 0; ++i)
for (int j = 0; x[j] >= 0; ++j)
wynik[j+i] += (x[j]*y[i]);
}
int dzielnik = 0;
for (int i = 0; i <= (xrozmiar+yrozmiar); ++i)
{
if (wynik[i]>9)
{
dzielnik = wynik[i] / 10;
wynik[i]-= 10*dzielnik;
wynik[i+1] = wynik[i+1] + dzielnik;
}
}
wynik[xrozmiar+yrozmiar] = -1;
printf("%d\n", (xrozmiar+yrozmiar) );
return wynik;
}
int main()
{
int licznik = 1;
int *silnia;
silnia = dotablicy(1,&licznik);
licznik = 1;
silnia = mnozenie(silnia,dotablicy(2,&licznik));
for (int i = 3; i < 10; ++i)
{
licznik = 1;
silnia = mnozenie(silnia,dotablicy(i,&licznik));
}
int i = 0;
while(silnia[i]>=0)
{
printf("%d",silnia[i] );
if (i%3==2)
printf(" ");
i++;
}
printf("\n");
free (silnia);
return 0;
}
Program dobrze radzi sobie z mnożeniem, nawet liczb wysokich ale przy 11! ma już spore problemy. Wydaje mi się, że nie wykrywa końca tablicy (oznaczonego -1) i dodaje do śmieci. Nie wiem też czemu cała tablica nie jest zerowana. Najbardziej mi zależy na funkcji mnożenia, bo wydaje mi się ze konwersja do tablicy i main działają ok. Jeśli popełniam jakąś herezje to będę wdzięczny za jej wytknięcie. Z góry dziękuję za wszystkie uwagi i ewentualną pomoc.