现在的位置: 首页 > 综合 > 正文

算法导论 1.1-4

2013年12月13日 ⁄ 综合 ⁄ 共 1056字 ⁄ 字号 评论关闭

有两个各存放在数组A和B中的n位二进制整数,考虑它们的相加问题。两个整数的和以二进制形式存放在具有(n+1)个元素的数组C中。请给出这个问题的形式化描述,并写出伪代码。

static void Main(string[] args)
        {
            char[] A1= Convert.ToString(12345678953435667, 2).ToCharArray();
            char[] B1 = Convert.ToString(987654321545775454, 2).ToCharArray();

            int len = A1.Length > B1.Length ? A1.Length : B1.Length;

            // 补位
            int[] A = new int[len];
            int[] B = new int[len];

            for (int i = 0; i < len; i++)
                A[i] = B[i] = 0;

            // 差值
            int Acz1 = len - A1.Length;
            int Bcz1 = len - B1.Length;
            for (int i = A1.Length-1; i >= 0; i--)
            {                
                A[i+Acz1] = Int32.Parse(A1[i].ToString());
            }

            for (int i = B1.Length-1; i >= 0; i--)
            {
                B[i + Bcz1] = Int32.Parse(B1[i].ToString());
            }            
            
            int[] C;
            C = SUM(A, B,len);

            string result = "";

            Console.Write("二进制:");
            for (int I = 0; I < C.Length; I++)
            {
                Console.Write(C[I].ToString());
                result += C[I].ToString();
            }
            Console.WriteLine("");
            Console.WriteLine("十进制:"+Convert.ToInt64(result,2));
            Console.ReadLine();
        }


        public static int[] SUM(int[] A, int[] B,int len)
        {
            int[] C = new int[len + 1];
            for (int i = 0; i < C.Length; i++)
                C[i] = 0;

            for (int I = C.Length-1; I > 0; I--)
            {
                if (A[I - 1] + B[I - 1] + C[I] > 1)
                {
                    int j = A[I - 1] + B[I - 1] + C[I];
                    if (j == 2)
                    {
                        C[I] = 0;
                        C[I - 1] = 1;
                    }
                    if (j == 3)
                    {
                        C[I] = 1;
                        C[I - 1] = 1;
                    }
                }
                else
                {
                    C[I] = A[I - 1] + B[I - 1] + C[I];
                }
            }

            return C;
        }

 

抱歉!评论已关闭.