演算法導論2.1-4 考慮n位二進位制整數相加起來的問題
阿新 • • 發佈:2019-01-01
考慮把兩個n位二進位制整數加起來的問題,這兩個整數分別儲存在兩個n元陣列A和B中。這兩個整數的和應按二進位制形式儲存在一個(n+1)元陣列C中。
使用java程式碼實現;實現程式碼如下:
引數A和B為相同長度n的整形陣列,該函式返回一個長度為n+1的陣列
private static int[] BinaryAdd(int[] A,int[] B) { int flag=0; int[] C=new int[A.length+1]; int i=0; for(i=A.length-1;i>=0;i--) { if((A[i]+B[i]+flag)>1) { C[i+1]=(A[i]+B[i]+flag)%2; flag=1; } else { C[i+1]=A[i]+B[i]+flag; flag=0; } } C[0]=flag; return C; }
拓展:如何實現兩個不限制長度的二進位制陣列相加並的出正確結果??
實現程式碼如下,程式碼有待優化:
private static int[] BinaryMultiAdd(int[] A,int[] B) { //返回陣列長度為A、B中長度較長的陣列+1 int[] C={}; int flag=0; if(A.length>B.length) { C=new int[A.length+1]; for(int i=A.length-1;i>=0;i--) { if(A.length-i<=B.length) { if((A[i]+B[B.length-A.length+i]+flag)>1) { C[i+1]=(A[i]+B[B.length-A.length+i]+flag)%2; flag=1; } else { C[i+1]=A[i]+B[B.length-A.length+i]+flag; flag=0; } } else { if((A[i]+flag)>1) { C[i+1]=(A[i]+flag)%2; flag=1; } else { C[i+1]=A[i]+flag; flag=0; } } } C[0]=flag; } else { C=new int[B.length+1]; for(int i=B.length-1;i>=0;i--) { if(B.length-i<=A.length) { if((B[i]+A[A.length-B.length+i]+flag)>1) { C[i+1]=(B[i]+A[A.length-B.length+i]+flag)%2; flag=1; } else { C[i+1]=B[i]+A[A.length-B.length+i]+flag; flag=0; } } else { if((B[i]+flag)>1) { C[i+1]=(B[i]+flag)%2; flag=1; } else { C[i+1]=B[i]+flag; flag=0; } } } C[0]=flag; } return C; }