Witam. Chcę napisać algorytm odejmowania pisemnego. Przygotowałem swój kod, ale nie działa on do końca dobrze. Poprawnie odejmuje 2 pierwsze liczby, ale potem coś się psuje. Domyślam się, że chodzi o zmienną diff i przenoszenia dziesiątek do mniejszych liczb, np. z cyfry dziesiątek na cyfrę jedności. Możecie zerknąć i podpowiedzieć, ewentualnie napisać poprawioną wersję?
#include <iostream>
using namespace std;
void wypisz(int arg[], int size)
{
int n=0;
while (arg[n] == 0)
{
cout<<"0";
n++;
}
for (int i = n; i<= size; i++)
{
cout<<arg[i];
}
cout<<endl;
}
void wczytaj (int size, int length, int arg[])
{
for (int i=0; i<=(size-length); i++)
{
arg[i] = 0;
}
for (int i=(size+1-length); i<=size; i++)
{
cout << "Podaj kolejna cyfre: ";
cin >> arg[i];
}
}
void dodaj (int arg1[], int arg2[], int length1, int length2, int size)
{
int suma;
int *T = new int[size];
for (int i=0; i<=size; i++)
{
T[i] = 0;
}
for (int i=size; i>=0; i--)
{
suma = arg1[i] + arg2[i] + T[i];
if (suma>9) T[i-1] = T[i-1] + 1;
T[i] = suma % 10;
}
wypisz(arg1, size);
wypisz(arg2, size);
wypisz(T, size); //wynik
delete [] T;
}
void odejmij (int arg1[], int arg2[], int length1, int length2, int size)
{
//tablica z wynikiem
int *T = new int[size];
for (int i=0; i<=size; i++)
{
T[i] = 0;
}
int num=0;
int diff;
if (length1 > length2)
{
for (int i=size; i> size-length1; i--)
{
if (arg1[i] >= arg2[i]) //jesli mozna odjac od siebie
{
T[i] = arg1[i] - arg2[i];
}
else//w przeciwnym razie nalezy szukac jakiejs liczby, z ktorej mozna pobrac wartosc
{
for (int j=i-1; j> size-length1; j--)
{
if (arg1[j] > 0) //jesli znajdzie liczbe wieksza od zera, na lewo od liczby ktora chcemy odjac to ma ona numer j
{
arg1[j]--;//zmniejszamy ta liczbe o 1
diff = i - j-1; //odleglosc liczby z ktorej pobieramy 1 od liczby odejmowanej
for (int k=j; k<i; k++) //tutaj jest przenoszenie tej jedynki, wymaga poprawy.
{
arg1[k+1] = arg1[k+1] + (10-diff);
diff--;
}
}
}
T[i] = arg1[i] - arg2[i];
}
wypisz(T, size); //wynik
}
//wypisz(arg1, size);
//wypisz(arg2, size);
//wypisz(T, size); //wynik
}
delete [] T;
}
int main()
{
int maxw1, maxw2;
int size = 60;
cout << "Cyfry wprowadzaj od najwiekszych az do cyfr jednosci."<<endl;
cout << "Pierwsza liczba: "<<endl;
cout << "Ilosc cyfr: ";
cin >> maxw1;
int tab1[size];
wczytaj(size, maxw1, tab1);
cout << "Druga liczba: " << endl;
cout << "Ilosc cyfr: ";
cin >> maxw2;
int tab2[size];
wczytaj(size, maxw2, tab2);
wypisz(tab1, size);
wypisz(tab2, size);
//dodaj(tab1, tab2, maxw1, maxw2, size);
odejmij(tab1, tab2, maxw1, maxw2, size);
return 0;
}