[C#][C++] Tłumaczenie kodu z C# na C++

MrOmega

[C#][C++] Tłumaczenie kodu z C# na C++

Post autor: MrOmega »

Witam

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();
Ostatnio zmieniony 22 paź 2012, o 19:39 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
ODPOWIEDZ