方法一,双重循环,每一趟外循环就求出一个B[i]。在每趟外循环中,初始B[i]为1,然后避开A[i],只计算其他数的乘积。
int* multiply(int* A, int ALen, int* returnSize ) {
    int* ret = NULL;
    ret = (int*)malloc(sizeof(int) * ALen);
    *returnSize = ALen;
    int i = 0, j = 0; 
    for(i = 0; i<ALen; i++){
        ret[i] = 1;
        for(j = 0; j<ALen;j++){
            if(j != i)
                 ret[i] *= A[j];
        }   
    }
    return ret;
方法二;将B[i]分成前部分和后部分的乘积。
int* multiply(int* A, int ALen, int* returnSize ) {
    int * B = NULL;
    B = (int*)malloc(sizeof(int) * ALen);
    *returnSize = ALen;
    int i = 0, tmp = 1;
    B[0] = 1;  //计算B[1]的前部分时用到
    for(i = 1; i < ALen; i++)  //从前往后计算前部分
        B[i] = B[i-1] * A[i-1];
    //上面for循环结束时,B[i]均只完成了前部分的乘积
    for(i = ALen - 1; i >= 0; i--){
        B[i] = B[i] * tmp;   //tmp为每个B[i]的后部分,初始B[n-1]=1
        tmp = tmp * A[i];   //从B[n-1]到B[0]的后部分是不断增多的
    }
    return B;
}