示例#1
0
        private void button1_Click(object sender, EventArgs e)
        {
            BigInteger inst = new BigInteger();

            if (first.Text != "" || second.Text != "")
            {
                res.Text = inst.Addition(first.Text, second.Text);
            }

            else
            {
                FileStream   add_in = new FileStream("AddTestCases.txt", FileMode.Open, FileAccess.Read);
                StreamReader sr     = new StreamReader(add_in);
                int          count  = int.Parse(sr.ReadLine());
                FileStream   fs     = new FileStream("AddOutput.txt", FileMode.Append);
                TextWriter   txt    = new StreamWriter(fs);

                while (count > 0)
                {
                    sr.ReadLine();
                    string Number1 = sr.ReadLine();
                    string Number2 = sr.ReadLine();

                    txt.WriteLine(inst.Addition(Number1, Number2));
                    txt.WriteLine();

                    count--;
                    first.Text  = "";
                    second.Text = "";
                    res.Text    = "";
                }
                sr.Close();
                add_in.Close();
                txt.Close();
                fs.Close();

                MessageBox.Show("Add output file has been created successfully ^o^");
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            BigInteger inst = new BigInteger();

            res.Text = inst.Addition(first.Text, second.Text);
        }
        static void Main(string[] args)
        {
            int          TestCases = 0;
            long         totalTime = 0;
            long         maxTime   = -1;
            FileStream   file;
            StreamReader sr;
            StreamReader srr;
            StreamWriter sw;
            Stopwatch    sww;
            //Console.WriteLine("First Number To Division: ");
            //string s = Console.ReadLine();


            //Console.WriteLine("Second Number To Division: ");
            //string r = Console.ReadLine();

            //Pair<string, string> ans = BigInteger.Division(s, r);


            //Console.WriteLine("Result = " + ans.First + "      Remainder = " + ans.Second);

            ////Console.WriteLine(BigInteger.ModOfPower("2003", "8", "3713"));

            //Console.WriteLine(BigInteger.BinaryRepresentation("8"));
            //Console.WriteLine(BigInteger.ModOfPower("2003", "8", "3713"));
            string EM = "", M = "";

            Console.WriteLine("RSA Encryption, Decryption\n[1] Sample test cases\n[2] Complete testing");
            char choice = (char)Console.ReadLine()[0];

            switch (choice)
            {
            case '1':
                File.Delete(@"SampleRSA_II\SampleRSA_Output.txt");
                srr = new StreamReader(@"SampleRSA_II\SampleRSA.txt");
                Console.SetIn(srr);
                TestCases = int.Parse(Console.ReadLine());
                file      = new FileStream(@"SampleRSA_II\SampleRSA_Output.txt", FileMode.Append, FileAccess.Write);
                sw        = new StreamWriter(file);
                for (int i = 0; i < TestCases; i++)
                {
                    string N                  = Console.ReadLine();
                    string e_OR_d             = Console.ReadLine();
                    string M_or_EM            = Console.ReadLine();
                    string encrypt_or_decrypt = Console.ReadLine();

                    if (encrypt_or_decrypt == "0")
                    {
                        EM = BigInteger.Encryption(M_or_EM, e_OR_d, N);
                        sw.WriteLine(EM);
                    }
                    else if (encrypt_or_decrypt == "1")
                    {
                        M = BigInteger.Decryption(M_or_EM, e_OR_d, N);
                        sw.WriteLine(M);
                    }
                    sw.WriteLine();
                    Console.WriteLine("Case " + (i + 1).ToString() + ": Done!");
                }
                sw.Close();
                // srr.Close();
                file.Close();
                break;

            case '2':
                File.Delete(@"Complete Test\CompleteRSA_Output.txt");
                srr = new StreamReader(@"Complete Test\TestRSA.txt");
                Console.SetIn(srr);
                TestCases = int.Parse(Console.ReadLine());
                file      = new FileStream(@"Complete Test\CompleteRSA_Output.txt", FileMode.Append, FileAccess.Write);
                StreamWriter ssww = new StreamWriter(file);
                for (int i = 0; i < TestCases; i++)
                {
                    string N                  = Console.ReadLine();
                    string e_OR_d             = Console.ReadLine();
                    string M_or_EM            = Console.ReadLine();
                    string encrypt_or_decrypt = Console.ReadLine();
                    long   timebefore         = System.Environment.TickCount;
                    if (encrypt_or_decrypt == "0")
                    {
                        EM = BigInteger.Encryption(M_or_EM, e_OR_d, N);
                        ssww.WriteLine(EM);
                    }
                    else if (encrypt_or_decrypt == "1")
                    {
                        M = BigInteger.Decryption(M_or_EM, e_OR_d, N);
                        ssww.WriteLine(M);
                    }
                    long timeafter = System.Environment.TickCount;
                    //if (timeafter - timebefore > 4000)
                    //{
                    //    Console.WriteLine("Time limit exceed: case # " + (i + 1));
                    //    srr.Close();
                    //    return;
                    //}
                    ssww.WriteLine("execution time = " + Math.Round((double)(timeafter - timebefore), 2) + "ms");
                    ssww.WriteLine("execution time = " + Math.Round((double)(timeafter - timebefore), 2) / 1000 + "s");
                    ssww.WriteLine();
                    Console.WriteLine("Case " + (i + 1).ToString() + ": Done!");
                }
                ssww.Close();
                // srr.Close();
                file.Close();
                break;

            default:


                Console.WriteLine("\n[1] Adding BigInteger Two Numper\n[2] Substract BigInteger Two Numper\n[3] Multiply BigInteger Two Numper\n[4] Divided BigInteger Two Numper");
                Console.Write("\nEnter your choice [1-2-3]:");


                char c          = (char)Console.ReadLine()[0];
                long TimeBefore = System.Environment.TickCount;
                switch (c)
                {
                case '1':
                    File.Delete("Add_Output.txt");
                    file = new FileStream("AddTestCases.txt", FileMode.Open, FileAccess.Read);
                    sr   = new StreamReader(file);
                    Console.SetIn(sr);
                    TestCases = int.Parse(Console.ReadLine());
                    totalTime = 0;
                    maxTime   = -1;

                    for (int i = 0; i < TestCases; i++)
                    {
                        sr.ReadLine();
                        string First_Number  = Console.ReadLine();
                        string Second_Number = Console.ReadLine();
                        sww = Stopwatch.StartNew();

                        string Result = BigInteger.Addition(First_Number, Second_Number);

                        sww.Stop();
                        if (sww.ElapsedMilliseconds > maxTime)
                        {
                            maxTime = sww.ElapsedMilliseconds;
                        }
                        totalTime += sww.ElapsedMilliseconds;

                        FileStream f = new FileStream("Add_Output.txt", FileMode.Append, FileAccess.Write);
                        sw = new StreamWriter(f);
                        sw.WriteLine(Result);
                        if (i != TestCases - 1)
                        {
                            sw.WriteLine();
                        }
                        sw.Close();
                        f.Close();
                    }
                    file.Close();
                    sr.Close();
                    break;

                case '2':
                    File.Delete("Subtract_Output.txt");
                    file = new FileStream("SubtractTestCases.txt", FileMode.Open, FileAccess.Read);
                    sr   = new StreamReader(file);
                    Console.SetIn(sr);
                    TestCases = int.Parse(Console.ReadLine());
                    totalTime = 0;
                    maxTime   = -1;

                    for (int i = 0; i < TestCases; i++)
                    {
                        sr.ReadLine();
                        string First_Number  = Console.ReadLine();
                        string Second_Number = Console.ReadLine();
                        sww = Stopwatch.StartNew();

                        string Result = BigInteger.Subtraction(First_Number, Second_Number);

                        sww.Stop();
                        if (sww.ElapsedMilliseconds > maxTime)
                        {
                            maxTime = sww.ElapsedMilliseconds;
                        }
                        totalTime += sww.ElapsedMilliseconds;

                        FileStream f = new FileStream("Subtract_Output.txt", FileMode.Append, FileAccess.Write);
                        sw = new StreamWriter(f);
                        sw.WriteLine(Result);
                        if (i != TestCases - 1)
                        {
                            sw.WriteLine();
                        }
                        sw.Close();
                        f.Close();
                    }
                    file.Close();
                    sr.Close();
                    break;

                case '3':
                    File.Delete("Multiply_Output.txt");

                    file = new FileStream("MultiplyTestCases.txt", FileMode.Open, FileAccess.Read);
                    sr   = new StreamReader(file);
                    Console.SetIn(sr);
                    TestCases = int.Parse(Console.ReadLine());
                    totalTime = 0;
                    maxTime   = -1;

                    for (int i = 0; i < TestCases; i++)
                    {
                        sr.ReadLine();
                        string First_Number  = Console.ReadLine();
                        string Second_Number = Console.ReadLine();
                        sww = Stopwatch.StartNew();

                        string Result = BigInteger.multiply(First_Number, Second_Number);

                        sww.Stop();
                        if (sww.ElapsedMilliseconds > maxTime)
                        {
                            maxTime = sww.ElapsedMilliseconds;
                        }
                        totalTime += sww.ElapsedMilliseconds;

                        FileStream f = new FileStream("Multiply_Output.txt", FileMode.Append, FileAccess.Write);
                        sw = new StreamWriter(f);
                        sw.WriteLine(Result);
                        if (i != TestCases - 1)
                        {
                            sw.WriteLine();
                        }
                        sw.Close();
                        f.Close();
                    }
                    file.Close();
                    sr.Close();
                    break;

                case '4':
                    File.Delete("Division_Output.txt");

                    file = new FileStream("DivisionTestCases.txt", FileMode.Open, FileAccess.Read);
                    sr   = new StreamReader(file);
                    Console.SetIn(sr);
                    TestCases = int.Parse(Console.ReadLine());
                    totalTime = 0;
                    maxTime   = -1;

                    for (int i = 0; i < TestCases; i++)
                    {
                        sr.ReadLine();
                        string First_Number  = Console.ReadLine();
                        string Second_Number = Console.ReadLine();
                        sww = Stopwatch.StartNew();
                        Pair <string, string> Result = BigInteger.Division(First_Number, Second_Number);
                        sww.Stop();
                        if (sww.ElapsedMilliseconds > maxTime)
                        {
                            maxTime = sww.ElapsedMilliseconds;
                        }
                        totalTime += sww.ElapsedMilliseconds;
                        FileStream f = new FileStream("Division_Output.txt", FileMode.Append, FileAccess.Write);
                        sw = new StreamWriter(f);
                        sw.WriteLine("Result = " + Result.First);
                        sw.WriteLine("Remainder = " + Result.Second);

                        if (i != TestCases - 1)
                        {
                            sw.WriteLine();
                        }
                        sw.Close();
                        f.Close();
                    }
                    file.Close();
                    sr.Close();

                    break;

                default:
                    break;
                }
                Console.WriteLine("Average execution time of test cases = " + Math.Round((double)totalTime / TestCases, 2) + "(ms)");
                Console.WriteLine("Max execution time of test cases = " + Math.Round((double)maxTime, 2) + "(ms)");
                long TimeAfter = System.Environment.TickCount;
                Console.WriteLine("total time of all test cases = " + (TimeAfter - TimeBefore) + "(ms)");
                break;
            }
            //else if (a == 2)
            //{
            //    string EM = Console.ReadLine();
            //    string d = Console.ReadLine();
            //    string n = Console.ReadLine();

            //    string M = BigInteger.Decryption(EM, d, n);
            //    Console.WriteLine("Decrypted messeage = " + M);
            //    Console.WriteLine();
            //    Console.WriteLine();

            //}
        }