[C] Mnożenie pod kreską

0

Witam,

dostałem w szkole program do napisania, który ma pytać użytkownika o 2 liczby, zrobić dzielenie modulo (nie mogę jednak używać %) i mnożyć "pod kreską". Z dzieleniem modulo sobie poradziłem ale utknąłem przy mnożeniu.

Dla przykładu mnożenie ma wyglądać tak (dla dowolnych dwóch liczb całkowitych);
http://img406.imageshack.us/i/92675539.jpg/ lub http://img98.imageshack.us/i/35334423.gif/

Na razie napisałem tyle (program pobiera 2 liczby, robi dzielenie modulo):

// Lab3.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

int division(int x, int y) {

if (y==0) {
	return 'e';
}

if (y!=0) { 
return (x-((x/y)*y));
}

}

int _tmain(int argc, _TCHAR* argv[])
{
int x,y,result;

printf ("Enter number 1 (x)=\n");
scanf ("%d", &x);
printf("\n Enter number 2 (y)=\n");
scanf ("%d", &y);



result=division(x,y);
if (result=='e') {
	printf ("\n\nERROR: division by 0 is forbidden");
} else {
printf ("\n\nResult of modulo division is: %d\n", result);
}







return 0;

}

Bardzo proszę o pomoc z tym mnożeniem. :)

0

Bylo kilka razy, ale lap - moja implementacja tego tylko dla liczb naturalnych

#define N	1024 // maksymalna pojemnosc buforow na liczby, na wynik 2*N

typedef unsigned char u_char;

// sumuje wyniki
// w - bufor wynikowy, k - liczba, ktora dodajemy, p - pozycja w buforze
void _muladd(u_char *w, int k, int p) {
	p += N;
	
	int m = 0;
	do {
		if(w[p] == 0)
			w[p] = '0';
		w[p] += m;
		w[p] += k;
		if(w[p] > '9') {
			w[p] -= '0';
			m = w[p]/10;
			w[p] %= 10;
			w[p] += '0';
		} else
			m = 0;
		k = 0; p -= 1;
	} while(m);
}

// mnozy, a oraz b sa wskaznikami na bufory zawierajace liczby do pomnozenia
void multiply(u_char *a, u_char *b) {
	int n = strlen(a), i,
	    m = strlen(b), j;
	int k, l;

	u_char *w = (u_char*)calloc(N<<1, sizeof(u_char));
// mnozy
	for(j = m-1, l = 0; j >= 0; j--) {
		for(i = n-1; i >= 0; i--) {
			k = (a[i]-'0') * (b[j]-'0');
			_muladd(w, k, i-l);
		}
		l += 1;
	}
// wypisuje
	for(i = 0; i < (N<<1) && !w[i]; i += 1);
	if(w[i] == '0') i += 1;
	while(i < N<<1 && w[i]) putc(w[i++], stdout);
	putc('\n', stdout);

	free(w);
}

Ogolnie to lepiej algorytm Karatsuby wykorzystac, ale jak chcesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1