Cześć. Mam w podręczniku taki algorytm w pseudokodzie i nie potrafię zrozumieć kilka jego części:
1. reszta <- a[0...d-1]
Co właściwie robi ten fragment? Chodzi o to by dodać kolejne elementy z tablicy od podanych id? W sumie tak zrobiłem, ale nie przyniosło to oczekiwanych rezultatów.
2. if(reszta < b)
Z założeń przedstawionych na poprzedniej stronie reszta i b to stringi więc jak ma to właściwie działać? Jak interpretować ten fragment. Mimo wszystko spróbowałem napisać to zgodnie z wytycznymi książki, a później dodatkowo dodać tam funkcję stoi jednak nie wiem czy o to chodziło:
Dodaj - Algorytm dodawania 2 liczb
Przeciwna - Zamienia liczbę na przeciwną w kodzie U2
Odejmij - Zwraca różnicę 2 podanych liczb
#include <iostream>
#include <string>
using namespace std;
string Dodaj(string a, string b)
{
int przn = 0;
string c;
while(a.size() < b.size())
{
a = '0' + a;
}
while(b.size() < a.size())
{
b = '0' + b;
}
for(int i = a.size() -1; i >= 0; i--)
{
int suma = przn + a[i]-'0' + b[i]-'0';
if(suma % 2 == 1)
{
c = '1' + c;
}
else
{
c = '0' + c;
}
przn /= 2;
}
if(przn == 1)
{
c = '1' + c;
}
return c;
}
string Przeciwna(string s)
{
int i = 0;
for(i = 0; i < 8; i++)
{
if(s[i] == '0')
{
s[i] = '1';
}
else
{
s[i] = '0';
}
}
s = '0' + s;
i = 8;
while(s[i] == '1')
{
s[i] = '0';
i--;
}
s[i] = '1';
return s.substr(1,8);
}
string Odejmij(string a, string b)
{
return Dodaj(a, Przeciwna(b));
}
int main()
{
int ilorazc = 1, d;
string a, b, reszta;
cin >> a >> b;
d = b.size();
for(int i = 0; i < d; i++)
{
reszta += a[i];
}
if(stoi(reszta) < stoi(b))
{
reszta += a[d];
d++;
}
reszta = Odejmij(reszta, b);
for(int i = d; i < a.size(); i++)
{
reszta += a[i];
if(stoi(reszta) < stoi(b))
{
ilorazc += '0';
}
else
{
ilorazc += '1';
reszta = Odejmij(reszta,b);
}
}
cout<< reszta;
return 0;
}