Napisałem program w C# (kod jedynej funkcji poniżej) i potrzebuję go przepisać na język C++. Chociaż te dwa języki są pozornie podobne, nie jestem w stanie tego zrobić. Mógłby mnie ktoś poinstruować jak się do tego zabrać / zwyczajnie pomóc? Nie mam zbyt wiele czasu... :]
Kod: Zaznacz cały
list<long>[] Segregacja;
long[] Czynniki;
list<long> lp;
long Plony = new long();
//Deklaracje zmiennych iteracyjnych
long ia, ib, ic, id, ie, ig, ih, ij;
int t = Convert.ToInt32(Console.ReadLine());
string Odpowiedz = "";
long n = new long(), suma = new long();
Segregacja = new List<long>[t];
//Pobranie inputów
for (int c = 0; c < t; c++)
{
Segregacja[c] = new List<long>();
string[] Linia = Console.ReadLine().Split();
foreach (string wyraz in Linia) Segregacja[c].Add(Convert.ToUInt32(wyraz));
Segregacja[c].RemoveAt(0);
suma = Segregacja[c].Sum();
if (suma > n) n = suma;
Segregacja[c].Add(suma);
}
lp = new List<long>();
bool[] T = new bool[n + 1];
long Er, a, b;
b = (long)(Math.Round(Math.Sqrt(n))) + 1;
for (Er = 2; Er <= b; Er++) if (T[Er] == false) for (a = Er * Er; a <= n; a += Er) T[a] = true;
for (Er = 2; Er <= n; Er++) if (T[Er] == false) lp.Add(Er);
Plony = lp.Count();
long lpierwsza, logarytm, licznik;
int CurrentSegrCount;
long long wynik;
for (ia = 0; ia < t; ia++)
{
Czynniki = new long[10];
CurrentSegrCount = Segregacja[ia].Count();
if (CurrentSegrCount != 0)
{
licznik = Segregacja[ia].ElementAt(CurrentSegrCount - 1);
for (ib = 0; ib < Plony; ib++)
{
lpierwsza = lp[(int)ib];
if (licznik < lpierwsza) break;
logarytm = (long)Math.Log(licznik, lpierwsza);
for (ic = 1; ic <= logarytm; ic++)
{
Czynniki[lpierwsza % 10] += (long)(licznik / Math.Pow(lpierwsza, ic));
}
}
for (id = 0; id < CurrentSegrCount - 1; id++)
{
licznik = Segregacja[ia].ElementAt((int)id);
for (ie = 0; ie < Plony; ie++)
{
lpierwsza = lp[(int)ie];
if (licznik < lpierwsza) break;
logarytm = (long)Math.Log(licznik, lpierwsza);
for (ih = 1; ih <= logarytm; ih++)
{
Czynniki[lpierwsza % 10] -= (long)(licznik / Math.Pow(lpierwsza, ih));
}
}
}
}
wynik = 1;
for (ig = 2; ig < 10; ig++)
{
for (ij = 0; ij < Czynniki[ig]; ij++)
{
wynik *= (ulong)ig;
while (wynik % 10 == 0) wynik /= 10;
if (wynik > 100000000000000000) wynik %= 100000000000000000;
}
}
while (wynik % 10 == 0) wynik /= 10;
wynik %= 10;
Odpowiedz += "
Case " + (ia + 1) + ": " + wynik;
}
Console.WriteLine(Odpowiedz);
Console.ReadLine();