Evo, da ne bi ispalo da sam bez veze teoretizirao, ovo je kod koji radi za to šifriranje.
Temelji se na matematičkoj formuli koja definira operator modulo a = a%b + (a/b) * b
U ovom programu, kvocijenti su stavljeni u globalnu varijablu, dakle, može se izvršiti samo dešifriranje šifriranog broja, a što je izgleda i zahtjev tog profe.
Za učiniti nešto više postoje dvije opcije:
- u ključ za šifriranje izdvojiti kvocijente
- na lijevu stranu broja nadodati kvocijente
#include <iostream>
using namespace std;
int kvocijenti;
int BrojZnamenki(int broj)
{
int brojZnamenki = 0;
while (broj>0)
{
broj /= 10;
brojZnamenki++;
}
return brojZnamenki;
}
int Sifriranje(int broj)
{
int brojZnamenki, sifra = 0, potencija = 1, potencija1 = 1;
brojZnamenki = BrojZnamenki(broj);
while (broj>0)
{
if(brojZnamenki % 2 == 0)
{
kvocijenti += (((broj % 10) + 4) / 3) * potencija1;
sifra += ((broj % 10) + 4)%3 * potencija;
potencija1 *= 10;
}
else
{
sifra += (broj % 10) * potencija;
}
potencija *= 10;
broj /= 10;
brojZnamenki--;
}
return sifra;
}
int Desifriranje(int sifriraniBroj)
{
int brojZnamenki, desifriraniBroj = 0, potencija = 1;
brojZnamenki = BrojZnamenki(sifriraniBroj);
while (sifriraniBroj>0)
{
if(brojZnamenki % 2 == 0)
{
desifriraniBroj += (((kvocijenti % 10) * 3 + (sifriraniBroj % 10)) - 4) * potencija;
kvocijenti /= 10;
}
else
{
desifriraniBroj += (sifriraniBroj % 10) * potencija;
}
potencija *= 10;
sifriraniBroj /= 10;
brojZnamenki--;
}
return desifriraniBroj;
}
int main()
{
int sifriraniBroj = Sifriranje(89125381);
cout<< sifriraniBroj << endl;
int desifriraniBroj = Desifriranje(sifriraniBroj);
cout<< desifriraniBroj << endl;
return 0;
}