public static ListSN CongSN(ListSN A, ListSN B)
        {
            int intRemember = 0;
            int intDiff = A.Count - B.Count;
            if (intDiff > 0)
                for (int i = 0; i < intDiff; i++)
                    B.AddNext(0);
            else if (intDiff < 0)
            {
                intDiff = 0 - intDiff;
                for (int i = 0; i < intDiff; i++)
                    A.AddNext(0);
            }
            ListSN C = new ListSN();
            A.ToFirst();
            B.ToFirst();
            while (A.NodeCurrent != null && B.NodeCurrent != null)
            {
                int value = A.NodeCurrent.Value + B.NodeCurrent.Value + intRemember;
                C.AddNext(value % 10);
                intRemember = value / 10;
                A.ToNext();
                B.ToNext();
            }

            return C;
        }
 static void Main(string[] args)
 {
     ListSN snA = new ListSN(args[0]);
     ListSN snB = new ListSN(args[1]);
     //Tinh ket qua
     ListSN ketQua = CongSN(snA, snB);
     Console.WriteLine(ketQua.GetValueList());
     if (Console.ReadLine() == "EXIT")
         return;
 }
        static void Main(string[] args)
        {
            Console.WriteLine("CHUONG TRINH CONG 2 SO NGUYEN LON");
            Console.WriteLine("\nNhap tu khoa \"Exit\" de ket thuc !!!\n\n\n");
            while (true)
            {
                string strS = "";
                ListSN snA;
                ListSN snB;

                try
                {
                    Console.Write("Nhap so nguyen lon A: ");
                    strS = Console.ReadLine();
                    if (strS.ToUpper() == "EXIT")
                        return;
                    snA = new ListSN(strS);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    strS = Console.ReadLine();
                    if (strS == "EXIT")
                        return;
                    else
                        continue;
                }

                try
                {
                    Console.Write("Nhap so nguyen lon B: ");
                    strS = Console.ReadLine();
                    if (strS.ToUpper() == "EXIT")
                        return;
                    snB = new ListSN(strS);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    if (Console.ReadLine() == "EXIT")
                        return;
                    else
                        continue;
                }

                ListSN ketQua = CongSN(snA, snB);
                Console.WriteLine(ketQua.GetValueList());
                if (Console.ReadLine() == "EXIT")
                    return;
            }
        }
 public static ListSN CongSN(ListSN firstNumber, ListSN secondNumber)
 {
     int intRemember = 0;
     int intDiff = firstNumber.Count - secondNumber.Count;
     // Nếu số nguyên A nhiều hơn số nguyên B 1,2,.. thì thêm các số 0 vào số B
     if (intDiff > 0)
         for (int i = 0; i < intDiff; i++)
             secondNumber.AddNext(0);
     // Nếu số nguyên A nhỏ hơn số nguyên B 1,2,.. thì thêm các số 0 vào số A
     else if (intDiff < 0)
     {
         intDiff = 0 - intDiff;
         for (int i = 0; i < intDiff; i++)
             firstNumber.AddNext(0);
     }
     // Tạo 1 list C mới
     ListSN resultNumber = new ListSN();
     // Chuyển nodeCurrent trong A về chữ số cuối cùng của chuỗi A
     firstNumber.ToFirst();
     // Chuyển nodeCurrent trong B về chữ số cuối cùng của chuỗi B
     secondNumber.ToFirst();
     // Nếu chữ số hiện tại mà NodeCurrent trong A và trong B có thì ta thực hiện cộng nó lại
     while (firstNumber.NodeCurrent != null && secondNumber.NodeCurrent != null)
     {
         // Cộng giá trị 2 chỉ số hiện tại trong A và B
         int value = firstNumber.NodeCurrent.Value + secondNumber.NodeCurrent.Value + intRemember;
         // Add số này vào chuỗi C, nếu số này lớn hơn 10 thì lấy phần dư thôi và nhớ lại 1
         resultNumber.AddNext(value % 10);
         // Lấy số nhớ
         intRemember = value / 10;
         // Chuyển tới chỉ số tiếp theo của số A và B
         firstNumber.ToNext();
         secondNumber.ToNext();
     }
     // Nếu số nhớ cuối cùng khác 0 thì Add thêm vào chuỗi C(chuỗi kết quả)
     if (intRemember != 0)
         resultNumber.AddNext(intRemember);
     return resultNumber;
 }