有两个各存放在数组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; }